В догонку к моим топовым вопросам. Какой наиболее оптимальный способ скрыть окно программы, запущенной через CreateProcess(). Эти параметры: Code: STARTUPINFO si; si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; как я понял софтинка игнорирует. Как поступить в таком случае? Насколько я понял можно еще попытаться найти хэндл окошка и попробовать его насильно спрятать, но тогда программа некоторое время все еще будет светить свое окно, а это форменный непохек. Подскажите, кто занимался и решение нашел
может лучше через WinExec("App Name", SW_HIDE) ? ну а если настаиваешь на Code: BOOL WINAPI CreateProcess( __in_opt LPCTSTR lpApplicationName, __inout_opt LPTSTR lpCommandLine, __in_opt LPSECURITY_ATTRIBUTESlpProcessAttributes, __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, __in BOOL bInheritHandles, __in DWORD dwCreationFlags, __in_opt LPVOID lpEnvironment, __in_opt LPCTSTR lpCurrentDirectory, __in LPSTARTUPINFO lpStartupInfo, __out LPPROCESS_INFORMATION lpProcessInformation ); то присмотрись к структуре Code: typedef struct _STARTUPINFO { DWORD cb; LPTSTR lpReserved; LPTSTR lpDesktop; LPTSTR lpTitle; DWORD dwX; DWORD dwY; DWORD dwXSize; DWORD dwYSize; DWORD dwXCountChars; DWORD dwYCountChars; DWORD dwFillAttribute; DWORD dwFlags; WORD wShowWindow; WORD cbReserved2; LPBYTE lpReserved2; HANDLE hStdInput; HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO; а именно к параметру wShowWindow то есть если в запускаемой проге функция ShowWindow вызывается более одного раза с ShowCmd != SW_SHOWDEFAULT, то нифига не сработает. Проверь прогу, которую запускаешь.
Темболее можно через DWORD dwX; DWORD dwY; задать положения окна за пределами экрана, чтобы его по любому не видно было
С WinExec точно такой же эффект. А с СreateProcess() указываю si.dwFlags = STARTF_USEPOSITION и кручу значения si.dwX и si.dwY но на поведение программы это никак не влияет. Может какие-то моменты не учтены?
RDL_Rider Multi Password Recovery t04 Для этого нужно найти хэндл окна, тоесть пока он будет искаться софтина будет видна.
если знаешь классс окна то можешь воспользоватся этим: Code: ShowWindow(FindWindow('OpWindow',nil), SW_HIDE); один из вариантов: Code: function OpWnd(Handle:HWND;ShowCmd:integer):bool;stdcall; var s:ANSIstring; begin SetLength(s,100); GetClassNameA(Handle,PANSIChar(s),100); SetLength(s, lStrLen(PANSIChar(s))); if s='OpWindow' then ShowWindow(Handle,ShowCmd); result:=true; end; procedure TForm1.FormClick(Sender: TObject); begin EnumWindows(@OpWnd,SW_HIDE);//второй параметр это для функции ShowWindow то есть что мы сделаем с окнами оперы.(покажем SW_Show, скроем SW_HIDE) end; это пример со скрытием окна оперы, OpWindow это класс окна оперы. p.s почитай еще вот тут (есть пример на делфи).
xafon Тестил на мпр, эффекта ноль. RDL_Rider Наверно попробую, но интересно было бы знать как сокрытие произвести без подобного бит хакинга.