Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» C++ WinAPI

Автор: koderr
Дата сообщения: 22.06.2006 13:03
dyr farot
Все, ребята,
Проблема снята.
Оказалось, файервол
Не пускал программу.
LOL
Автор: DeADMoHAX
Дата сообщения: 25.06.2006 08:37
Ребят, подскажите, как WriteFile дописать в файл (аналог ios:app в чистом С++) инфу.
Автор: tomegadeth
Дата сообщения: 25.06.2006 09:34
DeADMoHAX

Код: HANDLE hFile = CreateFile(....); // открываем
SetFilePointer(hFile, 0, 0, FILE_END); // ставим указатель в конеЦ
WriteFile(hFile,...);
//и так далее
//....
SetFilePointer(hFile, 0, 0, FILE_END); // ставим указатель в конеЦ
WriteFile(hFile,...);
//....
CloseHandle(hFile);
Автор: DeADMoHAX
Дата сообщения: 25.06.2006 17:26
tomegadeth
спасибо...
и еще:
1. приложение на указанной строке вываливается в аксесс виолейшн:

Код: #include <windows.h>

#define INTERNET_FLAG_ASYNC 0x10000000
#define INTERNET_OPEN_TYPE_DIRECT 1

typedef LPVOID HINTERNET;
typedef HANDLE (WINAPI *lInternetOpen)(LPCTSTR lpszAgent, DWORD dwAccessType, LPCTSTR lpszProxyName, LPCTSTR lpszProxyBypass, DWORD dwFlags);
typedef BOOL (WINAPI *lInternetCloseHandle)(HINTERNET hInternet);

void main()
{
    HMODULE hWinInetDll;
    HANDLE hFtp,hInet;

    if(!(hWinInetDll=::LoadLibrary("wininet")))
        MessageBox(NULL,"LOL","suck",NULL);
    else
        MessageBox(NULL,"HURRA","Yo",NULL);
    
    lInternetOpen mInternetOpen;
    lInternetCloseHandle mInternetCloseHandle;

    mInternetOpen=(lInternetOpen)GetProcAddress(hWinInetDll,"InternetOpen");
    mInternetCloseHandle=(lInternetCloseHandle)GetProcAddress(hWinInetDll,"InternetCloseHandle");
    
-> hInet=(*mInternetOpen)("MSIE6.0",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,INTERNET_FLAG_ASYNC);
    
(*mInternetCloseHandle)(hInet);
    FreeLibrary(hWinInetDll);
    return;
}
Автор: Abs62
Дата сообщения: 25.06.2006 19:44
DeADMoHAX

Цитата:
if(!(hWinInetDll=::LoadLibrary("wininet")))
MessageBox(NULL,"LOL","suck",NULL);


Код: if(!(hWinInetDll=::LoadLibrary("wininet")))
{ MessageBox(NULL,"LOL","suck",NULL); return; }
Автор: tomegadeth
Дата сообщения: 25.06.2006 20:37

Цитата:
2. Никто не видел реализацию download/upload FTP на winsock [не вининет]
если честно, нормальной реализации не встречал но если нужно, могу предоставить нормальный пример работы с фтп используя функции вининет.

Цитата:
3. Аналогично шифрование любым достаточно устойчивым алгоритмом файлов.
могу предложить простенький GOST, вроде насчет надежности никто сильно не ругался...
Автор: Arion
Дата сообщения: 25.06.2006 20:58

Цитата:
Аналогично шифрование любым достаточно устойчивым алгоритмом файлов

А чем Crypto API не устраивает? Самый простой пример из MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/example_c_program_encrypting_a_file.asp
Автор: DeADMoHAX
Дата сообщения: 25.06.2006 21:29
tomegadeth
вининет тоже реализован, но оптимизхацция превыше всего, любой ценой.
Arion
мне очень важен размер. Crypto API я кончно знаю, реализовал, но надо что-то полегче.

Про FTP забили, буду черз http, нашел реализацию. Осталось шифрование...Все, не надо, вопрос решил.
Автор: vinc5
Дата сообщения: 26.06.2006 16:13
Подскажите пожалуйста возможно ли с помощью winAPI управлять другими окнами из своей программы (т е ходить по пунктам меню, нажимать кнопки и т п)?
Автор: tomegadeth
Дата сообщения: 26.06.2006 16:32
vinc5 да, FindWindow, EnumChildWindows и SendMessage
Автор: vinc5
Дата сообщения: 26.06.2006 16:44
А можно какой нибудь пример посмотреть?
Никогда не сталкивался с этим, а сейчас очень надо
Автор: tomegadeth
Дата сообщения: 26.06.2006 21:18
vinc5 вот, пожалуйста [more]

Код: //---------------------------------------------------------------------------
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
char buf[50] = {0};
RealGetWindowClass(hwnd, buf, sizeof buf);
if(!lstrcmpi(buf, "TButton"))
{
GetWindowText(hwnd, buf, sizeof buf);
if(!lstrcmpi(buf, "OK"))
{
SendMessage(hwnd, WM_LBUTTONDOWN, 0, 0);
SendMessage(hwnd, WM_LBUTTONUP, 0, 0);
}
}
return 1;
}
//---------------------------------------------------------------------------
#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hParent = FindWindow("TMainForm", 0);
if(hParent)
EnumChildWindows(hParent, (WNDENUMPROC)EnumChildProc, 0);
return 0;
}
//---------------------------------------------------------------------------
Автор: vinc5
Дата сообщения: 27.06.2006 16:51
tomegadeth , спасибо. Плюс в инете по ключевым словам много чего нашел - буду разбираться
Автор: DeADMoHAX
Дата сообщения: 28.06.2006 08:41
Ребят а как с помощью CreaeFile, ReadFile реализовать построчное или пословное считывание из файла?
Автор: Mickey_from_nsk
Дата сообщения: 28.06.2006 08:55
DeADMoHAX
Видимо только побайтно. Эти вызовы очень низкоуровневые. Они даже не кешируются системой. Считывай в буфер и там анализируй.
Автор: tomegadeth
Дата сообщения: 28.06.2006 09:05
DeADMoHAX

Код: hFile = CreateFile(...);
DWORD dwbRead, dwSize = GetFileSize(hFile, 0);
char *pbuf = new char[dwSize+1];
ReadFile(hFile, pbuf, dwSize, &dwbRead, 0);

while(dwbRead)
{
if(pbuf[dwbRead]=='\r' && pbuf[dwbRead+1] == '\n') // нашли конец строки
{
//выполняем нужное действие
}
dwbRead--;
}
//или
for(int i = 0; i < dwbRead; i++)
{
if(pbuf[i]=='\r' && pbuf[i+1] == '\n') // нашли конец строки
{
//выполняем нужное действие
}
}

delete []pbuf;
CloseHandle(hFile);
Автор: DeADMoHAX
Дата сообщения: 28.06.2006 11:45
Может кто-нибудь посмотреть... как то странно после перехода с файловых потоков к чистому винапи функция шифрования файла перестала нормально функционированть.
Сорц:
http://xaknotdie.org/html/main.rar
Автор: tomegadeth
Дата сообщения: 28.06.2006 12:08
DeADMoHAX

Код:
// Encrypt data.
if(!CryptEncrypt(hKey,0,EOFile,0,pbBuffer,(DWORD*)dwCount,dwBufferLen))

// скорее всего так
if(!CryptEncrypt(hKey,0,EOFile,0,pbBuffer, &dwCount, dwBufferLen))

Автор: Kaylang
Дата сообщения: 30.06.2006 09:50
Всем доброго времени суток.
Есть такой вопрос. В WinAPI есть функция GetUserName() для получения имени пользователя. А есть-ли возможность узнать имя пользователя в сети Name(RDN)?
Автор: Mickey_from_nsk
Дата сообщения: 30.06.2006 10:45
Kaylang
Смотря какая сеть...
Собственно GetUserName возвращает имя пользователя, под которым он зарегистрировался на машине - доменное или локальное.
Что имеешь в виду под Name(RDN)?
Автор: Kaylang
Дата сообщения: 30.06.2006 11:05
Mickey_from_nsk

Цитата:
Смотря какая сеть...

Домен на Windows2000.

Цитата:
Собственно GetUserName возвращает имя пользователя, под которым он зарегистрировался на машине - доменное или локальное.
Что имеешь в виду под Name(RDN)?

Я не знаю, как точно в английской версии Name(RDN) у мну итальянская винда. У нас в сети в Name(RDN) указано полное имя пользователя, а GetUserName выдает логин пользователя.
Автор: Abs62
Дата сообщения: 30.06.2006 16:19
Kaylang

Цитата:
DsCrackNames

The DsCrackNames function converts an array of directory service object names from one format to another. Name conversion enables client applications to map between the multiple names used to identify various directory service objects. For example, user objects can be identified by SAM account names (domain\username), user principal name (username@domain.com), or distinguished name.

Не то?
Можно ещё это посмотреть:

Цитата:
IADsADSystemInfo

The IADsADSystemInfo interface gets data about the local computer if it is a Windows® 2000 computer in a Windows 2000 domain. For example, you can get the domain, site, and distinguished name of the local computer.

Автор: gerrCrazzy
Дата сообщения: 30.06.2006 16:32
Kaylang
Пробуй GetUserNameEx(NameDisplay,...) или TranslateName
Автор: Kaylang
Дата сообщения: 30.06.2006 23:59
Abs62
gerrCrazzy
Спасибо! В понедельник попробую и доложу о результатах.
Автор: Kaylang
Дата сообщения: 03.07.2006 13:17
Abs62
gerrCrazzy
Увы, в Delphi6 нет ни одной из этих функций.

ЗЫ. Задал вопрос здесь, в надежде найти функцию WinAPI для этого дела...
Автор: vshersh
Дата сообщения: 03.07.2006 13:53
Извините что на паскале, но
Kaylang:
[more=GetOSUserName]
Код: function GetOSUserName: string;

type
TOKEN_USER = record
User : TSidAndAttributes;
end;
PTOKEN_USER = ^TOKEN_USER;

var szUser,
szDomain : array [0..255] of Char;
cbSize,
cbUser,
cbDomain : DWORD;
hToken : THandle;
pUser : PTOKEN_USER;
sid_use : SID_NAME_USE;
begin
Result := '';
cbUser := 256;
cbDomain := 256;
ZeroMemory(@szUser, cbUser);
ZeroMemory(@szDomain, cbDomain);

if not OpenThreadToken(GetCurrentThread, TOKEN_QUERY, true, hToken) then
begin
if GetLastError <> ERROR_NO_TOKEN then Exit;
if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hToken) then exit;
end;

if not GetTokenInformation(hToken, TokenUser, nil, 0, cbSize) then
if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
begin
CloseHandle(hToken);
Exit;
end;

GetMem(pUser, cbSize);
try
if not GetTokenInformation(hToken, TokenUser, pUser, cbSize, cbSize) then Raise Exception.Create('');
LookupAccountSid(nil, pUser.User.Sid, @szUser, cbUser, @szDomain, cbDomain, sid_use);
Result := Format('%s\%s', [StrPas(szDomain), StrPas(szUser)]);
Result := LowerCase(Result);
finally
FreeMem(pUser);
CloseHandle(hToken);
end;
end;
Автор: gerrCrazzy
Дата сообщения: 03.07.2006 15:51
Kaylang

Цитата:
Увы, в Delphi6 нет ни одной из этих функций.

Возможно оттого, что эти функции доступны только в NT системах?

Цитата:
ЗЫ. Задал вопрос здесь, в надежде найти функцию WinAPI для этого дела...

Дык GetUserNameEx и есть функция WinAPI, если ее нет в стандартной поставке Delphi6, экспортируй самостоятельно из secur32.dll, описание параметров и MSDN:
Код: BOOLEAN GetUserNameEx(
EXTENDED_NAME_FORMAT NameFormat,
LPTSTR lpNameBuffer,
PULONG nSize
);
Автор: vshersh
Дата сообщения: 03.07.2006 16:50
gerrCrazzy
Да действительно...
Я невнимательно прочитал - думал речь идет об имени вида ДОМЕН\логин

Тогда конечно надо юзать
GetUserNameEx, но она
Цитата:
Requires Windows XP or Windows 2000 Professional.
Автор: Kaylang
Дата сообщения: 03.07.2006 18:16
gerrCrazzy

Цитата:
Возможно оттого, что эти функции доступны только в NT системах?

Дык, NT системы юзаю...

Цитата:
Дык GetUserNameEx и есть функция WinAPI, если ее нет в стандартной поставке Delphi6, экспортируй самостоятельно из secur32.dll, описание параметров и MSDN:

Ок! Попробую с этим разобраться завтра...
Автор: Mickey_from_nsk
Дата сообщения: 04.07.2006 07:13
Kaylang
По идее имя пользователя можно получить, сделав запрос к домену. Сейчас, если найду как это делается - выложу.

Нашел, но только на C#. По идее эти объекты должны отображаться на COM, а с ним на Delphi работать уже можно. Посмотри, может пригодится.


Код:
        void init()
        {
            try
            {
                // Получаем список существующих доменов.
                DirectorySearcher dds = new DirectorySearcher("(objectClass=domain)", new string[] {"name", "adspath"});
                SearchResultCollection dsr = dds.FindAll();

                this.domainBox.Items.Clear();
                foreach (SearchResult sr in dsr)
                {

                    this.domainBox.Items.Add(new DomainEntry(sr.Properties["name"][0].ToString(),
                        sr.Properties["adspath"][0].ToString()));
                }

                if (this.domainBox.Items.Count == 0)
                {
                    this.domainBox.Enabled = false;
                    this.listBox.Items.Clear();
                    this.listBox.Enabled = false;
                }
                else
                {
                    this.domainBox.SelectedIndex = 0;
                }
            }
            catch
            {
                this.domainBox.Enabled = false;
                this.domainBox.Items.Clear();
                this.listBox.Enabled = false;
                this.listBox.Items.Clear();
            }
        }

Страницы: 12345678910111213141516171819202122232425262728293031323334353637

Предыдущая тема: посоветуйте книги по SQL


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.