線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1128
推到 Plurk!
推到 Facebook!

请问:如何才能将exe文件的前一个实例的最小化的窗口恢复原样?

尚未結案
asddd
一般會員


發表:1
回覆:1
積分:0
註冊:2004-03-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-07 21:46:09 IP:221.10.xxx.xxx 未訂閱
为避免运行 .exe 的两个实例,如何才能正确地将已经最小化的第一个实例恢复原状? 按照以下方法将第一个实例恢复原样后,将会产生一个问题,该实例无法再次最小化,请问怎样才能使该实例可以再次被最小化? 多谢!!! unit justOne; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; StatusBar1: TStatusBar; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; function DoIExist(WndTitle: String): Boolean; var Form1: TForm1; implementation {$R *.dfm} function DoIExist(WndTitle: String): Boolean; var hSem: THandle; hWndCurrent, hWndPre: HWnd; semNm, wTitle: Array [0..256] of Char; const formTitle: String = 'TForm1'; begin Result := False; StrPCopy(semNm, 'daiwhea'); StrPCopy(wTitle, WndTitle); hSem := CreateSemaphore(nil, 0, 1, semNm); if(hSem <> 0) and (GetLastError() = ERROR_ALREADY_EXISTS) then begin CloseHandle(hSem); hWndCurrent := FindWindow(PChar(formTitle), PChar(WndTitle)); SetWindowText(hWndCurrent, 'tmpdaiwhea'); hWndPre := FindWindow(PChar(formTitle), PChar(WndTitle)); if (hWndPre = 0) then ShowWindow(hWndCurrent, sw_ShowNormal) else begin ShowWindow(hWndPre, sw_Restore); SetForeGroundWindow(hWndPre); Result := True; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin if DoIExist(Self.Caption) then halt; end; end.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-15 08:34:57 IP:202.39.xxx.xxx 未訂閱
試了一下, 好像沒問題哩!? 發表人 - hagar 於 2004/03/15 08:39:48
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-15 09:54:44 IP:203.95.xxx.xxx 未訂閱
Hi, 弟試過也沒有你說的奇怪現象.     
procedure TForm1.Button1Click(Sender: TObject);
var
  h: HWND;
begin
  h := FindWindow(nil, '未命名 - 記事本');
  if h<>0 then
  begin
    Edit1.Text := IntToStr(h);
    ShowWindow(h, SW_RESTORE);
    SetForeGroundWindow(h);
  end;
end;
asddd
一般會員


發表:1
回覆:1
積分:0
註冊:2004-03-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-16 18:40:57 IP:221.10.xxx.xxx 未訂閱
嗯,不好意思,我的机器前一段时间老出问题,我已经重装了系统,再试的时候,没有出现那个问题了,但又出现一个新的问题:如果第一个实例已经最小化,运行第二个实例的时候,只能避免出现连个实例,有一个窗口一闪而过,却不能把第一个实例的窗口推到最前面。我百思不得其解。 程序还是那个程序! 再次向大家道歉! 对不起,请原谅,我是初学,菜喔! Sorry!!!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-16 22:23:45 IP:202.39.xxx.xxx 未訂閱
不要寫在 FormCreate, 寫在 .dpr 檔中, 如下:
program test;    uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};    {$R *.RES}
begin
  Application.Initialize;
  // 寫在這邊試試, 
  // 如果已有第一個實例就不要做底下的動作
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
--- 這次沒買到 cd-pro2 實在很 ...
系統時間:2024-05-14 4:50:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!