Win他バージョンが混在する環境でWin2000/XPだけでコンピュータのロックを使うには?

解決


papier  2004-02-23 21:28:51  No: 7302

Win9x、NT、2000、XPの端末が混在する環境で使用するプログラムで、
Win2000、XPの端末だけコンピュータのロック機能を有効にしたいのですが、

procedure TForm1.Button1Click(Sender: TObject);
begin
  LockWorkStation;
end;

というようなコーディングをすると、
このプログラムをWin9xやNTでプログラムを起動した場合、
エラー(NTの場合「エントリポイントが見つかりません」)が
表示され、使えません。
なお、Win2000以上でないとButton1を使用できないような
制限はかけています。

何か良い知恵はありませんでしょうか?


にしの  2004-02-23 21:52:55  No: 7303

バージョンチェックして、LockWorkStationというAPIを動的にGetProcAdressしておけば良いかと。


papier  2004-02-24 02:07:48  No: 7304

早速のご回答ありがとうございます。
にしのさんがおっしゃるのはおそらくこういうことだと思うのですが、
Win9xでは「不正な処理」、NTでは「ワトソン博士」が起動時に表示されてしまいます。

function MyLockWorkStation: Boolean;
type
  TLockWorkStation = function: Boolean;
var
  h: HMODULE;
  LockWorkStation: TLockWorkStation;
begin
  Result := False;
  h := GetModuleHandle('USER32.DLL');
  if h <> 0 then
    begin
      @LockWorkStation := GetProcAddress(h, 'LockWorkStation');
      if @LockWorkStation <> nil then
        begin
          LockWorkStation;
          Result := True;
        end;
    end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  MyLockWorkStation;
end;


にしの  2004-02-24 03:12:06  No: 7305

GetModuleHandleでなく、LoadLibraryを使ってみてください。


papier  2004-02-24 04:18:38  No: 7306

残念ながら、結果は先程と同じでした。


にしの  2004-02-24 05:33:26  No: 7307

そのままコピーして使ってみましたがエラーは起きませんでした。
ただ、Win9xの環境がないため、VMware上でですが。

動的にLoadLibraryしているのであれば、少なくとも起動時にエラーが出るのはおかしいです。
他に原因があるのだと思います。
新規にプロジェクトを作成して試してみましたか?


jok  2004-02-24 05:36:53  No: 7308

> Win9xでは「不正な処理」、NTでは「ワトソン博士」が起動時に表示されてしまいます。

LockWorkStation は、2000/XP でしかつかえませんよ。
その他では実装されていませんから、呼び出した時点でエラーになります。
静的リンクもできません。

にしのさんの
> バージョンチェックして

は、papier さんはどのようにしてますか。また、2000/XP と判断したところで
LoadLibrary() GetProcAddress() FreeLibrary() を使います。


通りすがり  2004-02-24 17:40:14  No: 7309

私もそのままコピーして試しましたが、エラーは起きません。
W2K(D6)でコンパイルしてW98(SE)とNT(SP6)で実行しました。


papier  2004-02-24 19:06:40  No: 7310

新規プロジェクトを作成して試してみたらうまくいきました。
(確認環境:Win95b、NT4SP6)
エラーが出る他の原因を考えてみます。
皆さんありがとうございました。


papier  2004-02-24 19:28:34  No: 7311

エラーが出る原因も突き止めました。取り急ぎご連絡まで。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加