以编程方式按ALT + TAB直到活动标题与Delphi中的给定字符串匹配

时间:2015-04-26 12:21:31

标签: delphi delphi-2010

我正在尝试通过按ALT+TAB以编程方式选择与标题中的特定字符串匹配的窗口。 知道我该怎么办?

我正在尝试找到下面代码的替代解决方案,它有一个奇怪的缺点:外部应用程序的最小化按钮不起作用,除非我在任务栏上单击两次鼠标左键,其中窗体的矩形是。我创建的记事本,Mozilla和其他delphi应用程序不显示此行为。受此行为影响的唯一程序是我试图通过向其添加额外功能来控制的商业软件。

function FindWindowExtd(partialTitle: string): HWND;
var
  hWndTemp: hWnd;
  iLenText: Integer;
  cTitletemp: array [0..254] of Char;
  sTitleTemp: string;
begin
  hWndTemp := FindWindow(nil, nil);
  while hWndTemp <> 0 do begin
    iLenText := GetWindowText(hWndTemp, cTitletemp, 255);
    sTitleTemp := cTitletemp;
    sTitleTemp := UpperCase(copy( sTitleTemp, 1, iLenText));
    partialTitle := UpperCase(partialTitle);
    if pos( partialTitle, sTitleTemp ) <> 0 then
      Break;
    hWndTemp := GetWindow(hWndTemp, GW_HWNDNEXT);
  end;
  result := hWndTemp;
end;



 procedure Tform2.OnSchedule_1_Trigger(Sender: TScheduledEvent);
    var h:HWND;
        executabil:string;

    begin
    h:=FindWindowExtd(Edit_titlu_fereastra_program.text);
    if (h = 0) then
    begin
    // Oops not found
showmessage('THE WINDOW WAS NOT FOUND');

    end
    else
      begin
    // you got the handle!
    if iswindow(h) then begin

    showmessage('THE WINDOW WAS FOUND');
    ShowWindow(h,SW_MAXIMIZE);
    SetForegroundWindow(h);

      end;
      end;

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以从Windows API调用FindWindow函数来查找带有所需标题的窗口,然后根据需要将其显示在前面。

答案 1 :(得分:0)

喜欢这个

procedure Keybd_Press   (const AKey : byte);
begin
  Keybd_Event (AKey,0,0,0);
end;

procedure Keybd_Release (const AKey : byte);
begin
  Keybd_Event (AKey,0,KEYEVENTF_KEYUP,0);
end;

Keybd_Press (VK_MENU);
Keybd_Press (VK_TAB);
Keybd_Release (VK_TAB);
Keybd_Release (VK_MENU);