PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
1719 | 98/06/08 11:16:27 | RE(4):PB6: NT or 95:EXEの多重起動防止(FindWindowAは使えない・・・) By Air Hawk |
1715 | 98/06/08 10:30:03 | RE(3):PB6: NT or 95:EXEの多重起動防止(FindWindowAは使えない・・・) By こてちゅ |
1697 | 98/06/05 13:14:35 | RE(2):FindWindowAでもできます。しかし・・・ By かじ |
1691 | 98/06/05 11:06:44 | RE(1):FindWindowAでもできます。しかし・・・ By あすかちゃんの父 |
1677 | 98/06/04 18:12:46 | PB6: NT or 95:EXEの多重起動防止(FindWindowAは使えない・・・) By こてちゅ |
カテゴリ:旧電子会議室
日付:1998年06月08日 10:30 発信者:こてちゅ
題名:RE(3):PB6: NT or 95:EXEの多重起動防止(FindWindowAは使えない・・・)
自己レスです。
むちゃくちゃ邪道なやり方ですが、方法がありました。
GetWindowTextA()というAPI関数を使用して立ち上がっているウィンドウの
タイトルをループで取得していく方法です。
問題は、GetWindow()を使う為、自分自身のハンドルを取得しないとならないのですが、
これがうまくいかないので、ダミーのウィンドウをあげないといけないんです。
Windows自体のハンドルが取れるとそんな面倒は要らないとは思うんですが、
とりあえずユーザさんには許してもらうことにしました。
やり方は・・・・
//変数宣言
uint hwnd,hwndnext
String ptr
Long cnt
//砂時計
SetPointer ( HOURGLASS! )
Open(w_xxx) //ダミーのウィンドウをあげる
//タスクの中に指定のウィンドウがあるか?
ptr = Space(40)
hwnd = Handle(w_xxx) //ダミーウィンドウのハンドルを取得
hwndnext = GetWindow(hwnd,0) //APIでウィンドウのハンドルを取得する。
Do While hwndnext > 0
If GetWindowTextA(hwndnext,ptr,40) > 0 Then
If Pos(ptr,\"xxxt\") > 0 Then //ウィンドウのタイトルを検索
cnt ++
If cnt > 1 Then
Close(w_xxx)
MessageBox(\"test\",\"既にあがっていますよ\")
HALT
End If
End If
End If
hwndnext = GetWindow(hwndnext,2) //次のウィンドウハンドル
Loop
と、こんな感じです。
まだまだ問題はありそうですが、これで一応やりたかったことは出来るように
なりました。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS (記載なし)
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.