Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как программно закрыть окно чужой программы? Зная его заголовок. MessageDlg 
:(
    Опции темы
andrey_post
Дата 15.12.2004, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Выскакивает MessageDlg вот его надо закрыть.
Ипользую так:
Код

wnd2 := FindAWindow('Global Mail', '');
 if wnd2 = 0 then
  ShowMessage('Окно выборочный инмпорт не найдено')
else
begin
  wndBtn := FindWindowEx (wnd2, 0, nil, 'OK');
  // имитируем клик мышкой
  SendMessage(wndBtn, WM_LBUTTONDOWN, 0, 0);
  SendMessage(wndBtn, WM_LBUTTONUP, 0, 0);
 end;

Т.е. Выскакивает MessageDlg c заголовком 'Global Mail' и кнопкой ОК.
Вот надо программно нажать эту кнопку!
Нажиматься не хочет!
Как?
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
Alex
Дата 15.12.2004, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



А тебе точно в wndBtn возвращают handle кнопки?


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
andrey_post
Дата 15.12.2004, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Вот этого я как раз-то и не знаю. Скорее всего идет поиск окна 'Global Mail' - это заколовок и основного окна. Там идет поиск нопки "ОК" которой нет... а вот на MessageDlg помоему код внимания не обращает...
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
Lion_SKZD
Дата 15.12.2004, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.12.2004

Репутация: нет
Всего: нет



StartBtnWnd:=FindWindow('Shell_TrayWnd', nil); здесь мы ищем окно(Handle)
StartBtnBmp:=FindWindowEx(StartBtnWnd, 0,'Button', nil); затем функцией ....Ex ищеться (и только ей,а не "FindAWindow" )
уже в окне кнопка с именем или назвыавнием класса "Button"
,а её потом можешь её уже нажимать .
Ща поподробней попозже опишу! ))) Подожди
Добавлено @ 08:48
Вот простой пример закрытия окна Microsoft Word
Это способ №2
Коментарии писать не буду нет пока время ,если чё не понял пиши отвечу ни сразу ,но отвечу!)))
Код
var
 h:hWnd;
begin
 h:=FindWindow(nil, 'Microsoft Word');
 if h=0 then exit;
 SendMessage(h, WM_DESTROY, 0,0);
end;


Это сообщение отредактировал(а) p0s0l - 29.9.2005, 11:13
PM MAIL   Вверх
andrey_post
Дата 15.12.2004, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



ХХхххххх....
нифига не один метод не подходит smile(((
все окна закрываются, а вот MessageDlg не хочет
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
andrey_post
Дата 15.12.2004, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Полный исходник:
Код

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Label1: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   menu : HMENU;
TheWindowHandle, wnd2, wndBtn : HWND;
nItem, nItemID : integer;
mi : TMENUINFO;
h,StartBtnWnd,StartBtnBmp:hWnd;
 end;
 type
PFindWindowStruct = ^TFindWindowStruct;
TFindWindowStruct = record
Caption : string;
ClassName : string;
WindowHandle : THandle;
end;



var
 Form1: TForm1;

implementation

{$R *.dfm}

function EnumWindowsProc(hWindow : hWnd;
lParam : LongInt) : Bool
{$IFDEF Win32} stdcall; {$ELSE}; export; {$ENDIF}
var
lpBuffer : PChar;
WindowCaptionFound : bool;
ClassNameFound : bool;
begin
GetMem(lpBuffer, 255);
Result := True;
WindowCaptionFound := False;
ClassNameFound := False;
try
if GetWindowText(hWindow, lpBuffer, 255) > 0 then
if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer)) > 0
then WindowCaptionFound := true;
if PFindWindowStruct(lParam).ClassName = '' then
ClassNameFound := True else
if GetClassName(hWindow, lpBuffer, 255) > 0 then
if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer))
> 0 then ClassNameFound := True;
if (WindowCaptionFound and ClassNameFound) then begin
PFindWindowStruct(lParam).WindowHandle := hWindow;
Result := False;
end;
finally
FreeMem(lpBuffer, sizeof(lpBuffer^));
end;
end;

function FindAWindow(ACaption : string;
AClassName : string) : THandle;
var
WindowInfo : TFindWindowStruct;
begin
with WindowInfo do begin
Caption := ACaption;
ClassName := AClassName;
WindowHandle := 0;
EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
FindAWindow := WindowHandle;
end;
end;

function FindMenuItem (m : HMENU; const Item : string) : integer;
var
  i : integer;
  Buf : PChar;
begin
  Result := -1;
  GetMem (Buf, 255);
  for i := 0 to GetMenuItemCount(m)-1 do
  begin
    GetMenuString (m, i, Buf, 255, MF_BYPOSITION);
    if Buf = Item then
    begin
      Result := i;
      Break;
    end;
  end;
  FreeMem (Buf);
end;

procedure Delay(Value:Cardinal);   //в миллисекундах
var F, N:Cardinal;
begin
N:=0;
while N<=(Value div 10) do
begin
SleepEx(1,True);
Application.ProcessMessages;
Inc(N);
end;
F:=GetTickCount;
repeat
Application.ProcessMessages;
N:=GetTickCount;
until (N-F>=(Value mod 10)) or (N<F);
end;


procedure TForm1.Button1Click(Sender: TObject);  //Импорт
var TheWindowHandle : THandle;
begin
TheWindowHandle := FindAWindow('Global Mail', '');
if TheWindowHandle = 0 then
 begin
  ShowMessage('Окно не нейдено!')
 end
else
begin
 //BringWindowToTop(TheWindowHandle);
 TheWindowHandle := FindAWindow('Global Mail', '');
 menu := GetMenu (TheWindowHandle);
 //menu := MainMenu1.Handle;
 menu := GetSubMenu (menu, FindMenuItem (menu, 'Файл'));
 menu := GetSubMenu (menu, FindMenuItem (menu, 'Импорт'));
 nItem := FindMenuItem (menu, 'Выборочный импорт...');
 // нашли наш пункт меню, теперь надо активировать его
 nItemID := GetMenuItemID (menu, nItem);
 mi.cbSize := SizeOf(mi);
 GetMenuInfo (menu, mi);
 if (mi.dwStyle and MNS_NOTIFYBYPOS) = MNS_NOTIFYBYPOS then
 begin
  SendMessage (TheWindowHandle, WM_MENUCOMMAND, nItem, menu);
  end
 else
  PostMessage(TheWindowHandle, WM_COMMAND, nItemID, 0);
  BringWindowToTop(TheWindowHandle);
// repeat
  wnd2 := FindAWindow('Выборочный импорт', ''); //FindWindow (nil, 'Выборочный импорт');
  if wnd2 = 0 then
  ShowMessage('Окно выборочный импорт не найдено')
else
  //   Sleep(0);
// until wnd2 <> 0;
 begin
  wndBtn := FindWindowEx (wnd2, 0, nil, 'Начать');
  // имитируем клик мышкой
  SendMessage(wndBtn, WM_LBUTTONDOWN, 0, 0);
  SendMessage(wndBtn, WM_LBUTTONUP, 0, 0);
 end;
 Delay( 25000 );
 /////////////////////////////////////////////////////////////
{ StartBtnWnd:=FindWindow('Global Mail', nil); //здесь мы ищем окно(Handle)
 StartBtnBmp:=FindWindowEx(StartBtnWnd, 0,nil, 'OK'); //затем функцией ....Ex ищеться (и только ей,а не "FindAWindow"
 SendMessage(StartBtnWnd, WM_LBUTTONDOWN, 0, 0);
 SendMessage(StartBtnBmp, WM_LBUTTONUP, 0, 0);}
 begin
 h:=FindWindow(nil, 'Global Mail');
 if h=0 then exit;
 SendMessage(h, WM_DESTROY, 0,0);
 end;
 /////////


 wnd2 := FindAWindow('Global Mail', ''); //Сдесь ищем окно и на нем нопку "ОК"
 if wnd2 = 0 then
  ShowMessage('Окно не найдено')   //никогда не выводится. значит окно найдено
else
begin
  wndBtn := FindWindowEx (wnd2, 0, nil, 'OK');
  // имитируем клик мышкой
  SendMessage(wndBtn, WM_LBUTTONDOWN, 0, 0);
  SendMessage(wndBtn, WM_LBUTTONUP, 0, 0);
 end;
 /////////////////////////////////////////////////////////////
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var TheWindowHandle : THandle;
begin
TheWindowHandle := FindAWindow('Global Mail', '');
if TheWindowHandle = 0 then
 begin
  ShowMessage('Окно не нейдено!')
 end
else
begin
 //BringWindowToTop(TheWindowHandle);
 TheWindowHandle := FindAWindow('Global Mail', '');
 menu := GetMenu (TheWindowHandle);
 //menu := MainMenu1.Handle;
 menu := GetSubMenu (menu, FindMenuItem (menu, 'Файл'));
 menu := GetSubMenu (menu, FindMenuItem (menu, 'Экспорт'));
 nItem := FindMenuItem (menu, 'Экспорт в PC Sprint Mail...');
 // нашли наш пункт меню, теперь надо активировать его
 nItemID := GetMenuItemID (menu, nItem);
 mi.cbSize := SizeOf(mi);
 GetMenuInfo (menu, mi);
 if (mi.dwStyle and MNS_NOTIFYBYPOS) = MNS_NOTIFYBYPOS then
 begin
  SendMessage (TheWindowHandle, WM_MENUCOMMAND, nItem, menu);
  end
 else
  PostMessage(TheWindowHandle, WM_COMMAND, nItemID, 0);
  BringWindowToTop(TheWindowHandle);
// repeat
  wnd2 := FindAWindow('Экспорт в PC Sprint Mail', ''); //FindWindow (nil, 'Выборочный импорт');
  if wnd2 = 0 then
  ShowMessage('Окно Экспорт в PC Sprint Mail не найдено')
else
  //   Sleep(0);
// until wnd2 <> 0;
 begin
  wndBtn := FindWindowEx (wnd2, 0, nil, 'Начать');
  // имитируем клик мышкой
  SendMessage(wndBtn, WM_LBUTTONDOWN, 0, 0);
  SendMessage(wndBtn, WM_LBUTTONUP, 0, 0);
 end;
 Delay( 50000 );
 /////////////////////////////////////////////////////////////
 wnd2 := FindWindow(nil,'Global Mail');
 if wnd2 = 0 then
  ShowMessage('Окно выборочный инмпорт не найдено')
else
begin
  wndBtn := FindWindowEx (wnd2, 0, nil, 'OK');
  // имитируем клик мышкой
  SendMessage(wndBtn, WM_LBUTTONDOWN, 0, 0);
  SendMessage(wndBtn, WM_LBUTTONUP, 0, 0);
 end;
 /////////////////////////////////////////////////////////////
 Delay( 50000 );
 /////////////////////////////////////////////////////////////
 wnd2 := FindAWindow('Экспорт в PC Sprint Mail', '');
 if wnd2 = 0 then
  ShowMessage('Окно Экспорт в PC Sprint Mail не найдено')
else
begin
  wndBtn := FindWindowEx (wnd2, 0, nil, 'Закрыть');
  // имитируем клик мышкой
  SendMessage(wndBtn, WM_LBUTTONDOWN, 0, 0);
  SendMessage(wndBtn, WM_LBUTTONUP, 0, 0);
 end;
 /////////////////////////////////////////////////////////////
end;

end;

end.

--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
SlaUr
Дата 15.12.2004, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Может сначала посмотреть название окна которое появляется при
MessageDlg
Вот код для сканирования всех окон:

Код

procedure TForm1.Button1Click(Sender: TObject);
VAR
 Wnd : hWnd;
 buff: ARRAY [0..127] OF Char;
begin
 ListBox1.Clear;
 // Получаем hWnd первого окна
 Wnd := GetWindow(Handle, gw_HWndFirst);
 // Цикл поиска окон
 WHILE Wnd <> 0 DO BEGIN
   IF (Wnd <> Application.Handle) AND // -Собственное окно
      (IsWindowVisible(Wnd)) AND             // -Невидимые окна
      (GetWindow(Wnd, gw_Owner) = 0) AND   // -Дочернии окна
      (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) // -Окна без заголовков
   THEN BEGIN
     GetWindowText(Wnd, buff, sizeof(buff));
     ListBox1.Items.Add(StrPas(buff));
   END;
   // Ищем новое окно
   Wnd := GetWindow(Wnd, gw_hWndNext);
 END;

end;



Это сообщение отредактировал(а) SlaUr - 15.12.2004, 11:00
PM MAIL   Вверх
andrey_post
Дата 15.12.2004, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Ну вывел он список окон:

Global Mail
transport - Borland Delphi 2005 for Microsoft Windows - Unit1 [Running]
Windows Commander 5.11 - Trendline
VPF::Как программно закрыть окно чужой программы? - Форум программистов Vingrad
The Bat!
Program Manager

И че?
Дело в том что есть окно самой рограммы с заготовком Global Mail.
И потом появляется MessageDlg или MessageBox с таким же заголовком где и нужно нажать кнопку ОК.
Добавлено @ 12:04
Хм... че то я у себя не наблюдаю окна "Program Manager"...

Это сообщение отредактировал(а) andrey_post - 15.12.2004, 12:02
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
andrey_post
Дата 15.12.2004, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Код

 wnd2 := FindAWindow('Выборочный импорт', ''); //FindWindow (nil, 'Выборочный импорт');
  if wnd2 = 0 then
  ShowMessage('Окно выборочный импорт не найдено')
else
 begin
  wndBtn := FindWindowEx (wnd2, 0, nil, 'Начать');
  // имитируем клик мышкой
  SendMessage(wndBtn, WM_LBUTTONDOWN, 0, 0);
  SendMessage(wndBtn, WM_LBUTTONUP, 0, 0);
 end;
// ВОТ В ЭТОМ МЕСТЕ ПРОГА ЗАВИСАЕТ ПОКА НЕ НАЖМУ КНОПКУ "ОК"
// КОТОРУЮ МНЕ И НУЖНО ПРОГРАММНО НАЖАТЬ
// ПОСЛЕ НАЖАТИЯ ПРОДАЛЖАЕТСЯ ДВИЖЕНИЕ ПО КОДУ...

smile
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
SlaUr
Дата 15.12.2004, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Может я даю глупый совет но попробуйте закоментировать в выше приведенном коде "дочерние окна" ,тогда в листинге окон может появится то окно - оно ведь дочернее или я не прав?
PM MAIL   Вверх
andrey_post
Дата 15.12.2004, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



А может приложение ваще грохнуть?
Вобщем ситуация такая. в оперделенное время нужно делать импорт или экспорт.
Думаю дотель сделать такой.
Таймер 1.
Выключает таймер 2
Выполняет импорт
Закрывает полностью используемое приложение
Выключает таймер 1 (самого себя)
Включает таймер 2

Таймер 2.
Выключает таймер 1
Выполняет экспорт
Закрывает полностью используемое приложение
Выключает таймер 2 (самого себя)
Включает таймер 1

Как приложение тогда грохнуть? Знаю только имя exe "globmail.exe" название окна Global Mail

Поскриптум:
Сори админу за второй вопрос в топике!

Это сообщение отредактировал(а) andrey_post - 15.12.2004, 15:50
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
Rennigth
Дата 16.12.2004, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



может и глупо но непробовал
Код

GetActiveWindow


а процесс убить можно так
(лень править для конкретного случая ну я думаю смысл понятен)

Код

uses tlhelp32
....

function TerminateDBEngine(APath : PChar ) : boolean; StdCall;
var
 lSnapHandle, lProcHandle{, lTrayWindowHandle }: THandle;
 ProcStruct : PROCESSENTRY32;
 lProcessPath : String;
 lBDEngineName : String;
 lPath : String;
 PID : Cardinal;
 OSVerInfo: TOSVersionInfo;
//  lCursorPos : TPoint;
//  lTrayRect : TRect;
begin
 Result := false;
 lSnapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
 if lSnapHandle = 0 then
   exit;
 ProcStruct.dwSize := sizeof( PROCESSENTRY32 );

 OSVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
 GetVersionEx(OSVerInfo);
 case OSVerInfo.dwPlatformId of
   VER_PLATFORM_WIN32_WINDOWS:
   begin
     lPath := APath;
     if not IsPathDelimiter(APath,Length(lPath)) then
     begin
       SetLength(lPath,Length(lPath)+1);
       lPath[Length(lPath)] := '\'
     end;
     lBDEngineName := 'DBEngine.exe'
   end;
   VER_PLATFORM_WIN32_NT:
   begin
     lPath := '';
     lBDEngineName := 'DBEngine.exe';
   end;
 end;

 if Process32First(lSnapHandle, ProcStruct) then
 begin
   try
     repeat
       lProcessPath := ProcStruct.szExeFile;
       if uppercase(lProcessPath) = uppercase(lPath + lBDEngineName) then
       begin
         PID := ProcStruct.th32ProcessID;

         lProcHandle := OpenProcess(PROCESS_TERMINATE, False, PID);
         TerminateProcess(lProcHandle, 0);
         WaitForSingleObject(lProcHandle, infinite);
         CloseHandle(lProcHandle);
         Result := true;
       end;
     until not Process32Next(lSnapHandle, ProcStruct);
   finally
     CloseHandle(lSnapHandle);
   end;
 end;
end;




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
srd
Дата 16.12.2004, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: нет
Всего: 49



А если просто послать окну WM_CLOSE, что происходит? Кстати, чужому окну сообщения лучше посылать функцией PostMessage, а не SendMessage. В противном случае, если чужая программа висит, то повесится и твоя тоже.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Rennigth
Дата 16.12.2004, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



srd
как я понял у andrey_post проблема не в том как закрыть это окно а как получить его хендл.

у меня была такаяже проблемма когда много окон с одинаковым заголовком, я обошелся
GetActiveWindow потомучто нужно было закрывать только активное, если тебе это неподходить можно попробовать использовать FindWindow и по заголовку и по ClassName (вроде так можно), у MessageBoxа и главной програмой должны быть разными.



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
andrey_post
Дата 19.12.2004, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Выяснилось:
Главное окно:
Класс: ThunderRT5Form
Родительский класс: ThunderRT5Form

Окно которе нужно закрыть:
Класс: #32770
Родительский класс: ThunderRT5Form

У кнопки:
Класс: Button
Родительский класс: #32770

И че щас делать?
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1196 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.