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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.