Win32API質問箱 Build25

このエントリーをはてなブックマークに追加
356デフォルトの名無しさん
クライアント(描画領域)サイズを 640x480 にしたい場合
ウインドウスタイル(枠線やらメニューやら)によって
ウインドウ生成時のサイズが変わりますよね 650x510(←てきとう)みたいに大きめに。

クライアントサイズをw*hにしたい場合は、(このウインドウスタイルなら)W*Hで作れるよ。
って数値を逆算してくれるAPIってありますか?
無いなら、それを計算する方法を説明したサイトってありませんか?

357デフォルトの名無しさん:04/12/08 16:23:17
>>356
AdjustWindowRect

って、前スレにも同じ質問があったような・・・
358デフォルトの名無しさん:04/12/08 16:23:19
AdjustWindowRectEx
359デフォルトの名無しさん:04/12/08 16:25:32
大変、申し訳ございませんが、ひとつ教えていただきたいことがあります。

ローカルマシンでなく、ネットワークのマシンで、
プロセスを列挙するようなAPIってないでしょうか?
また、そのプロセスがどのユーザで動いているか
わかることができればより助かります。

WTSEnumerateProcessesとLookupAccountSidを
組み合わせれば可能であることを確認したのですが、
ターミナルサービスに対応していないと駄目なようなのです。

WinNT Server、Win2000 Server、Win2003上で確実に動作する。
そんな素敵なプロセス列挙APIをご存知ないでしょうか?

教えてくださいこのやろうども。
360デフォルトの名無しさん:04/12/08 16:27:02
>>357,358
すげー。
ありがとう。
361297:04/12/08 16:46:43
>>308
>>314
>>315
>>316

レスありがとうございます
>>314
環境がPerlでWin32-APIを使っているもので、変数が定義されていないからです
環境の記入漏れがあって申し訳ありません

>>315
実際は3回行っていました
仰る通りPostMessageにしたら期待通りの動作が出来ました
ありがとうございました

実際のキーボードもこのようにリターンを待っているのでしょうか
>指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返しません
と言う記述を見て、キーボードは返り値を待たないのではと勝手に思い込み
この関数は試していませんでした
勝手な思い込みはダメですね、気をつけます
362297:04/12/08 17:35:21
三回入力されていた原因は、WM_KEYUPのlParamを0xC01E0001にしていなかった
ミスによるものでした
lParamを0xC01E0001にしたところ、二回入力となりました

SendMessageではWM_CHARを送らなければ文字は入力されませんでした
363デフォルトの名無しさん:04/12/08 17:37:21
そりゃTranslateされないからだべ
364デフォルトの名無しさん:04/12/08 18:36:19
>>359
質問の意味が良くわからん。
WTSEnumerateProcessesとLookupAccountSidの使い方が分からんという意味なのか?
365デフォルトの名無しさん:04/12/08 18:49:02
>>364
WTSEnumerateProcessesとLookupAccountSidを使って目的は果たせたのですが、
この方法はNTではできないので、NTでもできて欲しいのです。

NTサーバでも動くものもあるのですが、
Windows NT4.0 Terminal Server Edition SP4でないと動かないみたいなので。

無視されるかと思ってたのですがレスありがとう。
366デフォルトの名無しさん:04/12/08 19:45:36
ちょっと興味があったんだが、>>302の質問って誰も答えられないのか?
367デフォルトの名無しさん:04/12/08 19:50:08
うん
368デフォルトの名無しさん:04/12/08 19:51:25
>366
このスレのレベルじゃ当然。
369デフォルトの名無しさん:04/12/08 20:25:06
>>341
sendのあとで、すぐにrecvすんなよ。
select使えよ。
370デフォルトの名無しさん:04/12/08 20:35:27
>>302
漏れは全然この辺知らないので、基本的なところの確認。
・ImpersonatLoggedOnUser はサーバOSでしかサポートされていない。
・CSRSS.EXE は、SeDebugPrivilege privilege が無いとHookできない。
・SetWindowsHookEx は User32.dll とリンクしていないプロセスや、システムサービスをHookできない。

なんとなく上の2つが引っかかってるような気が・・・
371デフォルトの名無しさん:04/12/08 20:39:22
>369
理由は?
372デフォルトの名無しさん:04/12/08 21:00:13
固まるからじゃねーの?真意は知らんが。
373デフォルトの名無しさん:04/12/08 21:02:49
374デフォルトの名無しさん:04/12/08 22:17:20
2つのビットマップを異なるパレットで表示したいのですが、
どうしたらよいでしょうか?

パレットをあらかじめ2つCreatePalette()で作っておいて、

SelectPalette(hDC, hPalette1, FALSE);
RealizePalette(hDC);
SetDIBitsToDevice(); /* 1つめのビットマップ */

UnrealizeObject(hPalette1);
SelectPalette(hDC, hPalette2, FALSE);
RealizePalette(hDC);
SetDIBitsToDevice(); /* 1つめのビットマップ */

ではだめでしょうか?
375デフォルトの名無しさん:04/12/08 22:26:03
>>374
やってみたら?
376デフォルトの名無しさん:04/12/08 23:03:49
>>289
デスクトップの数だけスレッドを作ってSetThreadDesktopすればいい
377デフォルトの名無しさん:04/12/08 23:24:05
>>374
パレット弄ってもビデオモードによっては意味無いんじゃないの?
378デフォルトの名無しさん:04/12/08 23:27:36
>>374
SetDIBitsToDevice に渡している Bitmapinfo に色情報が入っていればちゃんと出るはず。
379デフォルトの名無しさん:04/12/09 02:23:54
モーダルダイアログボックスのタイトルバーの文字をGetWindowText関数で取得して
それをSendMessage関数でメインウィンドウに送ってるのですが
なぜかモーダルダイアログボックスのタイトル文字が変化してしまいます。

 GetWindowText(mod,buf,300);
 SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)buf);

modがダイアログボックスです。原因を教えてくださいお願いします
380デフォルトの名無しさん:04/12/09 02:25:53
>>379
 SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)TEXT("タイトル"));
でも、モーダルダイアログの方が変わるのか?
hwndの値は間違ってないか?
381379:04/12/09 02:28:26
>>380
いまためしたのですがダイアログの方が変わります。値とはなんでしょうか?変数名は間違ってません
382379:04/12/09 02:37:23
ちなみにこれを記述してる場所はダイアログボックスのプロシージャの中です
383デフォルトの名無しさん:04/12/09 02:39:11
だからさ、hwndの値がダイアログのものになってるんだろ?
384デフォルトの名無しさん:04/12/09 02:40:00
なんでしょうかじゃねえだろ値をもたない変数などねーんだよ
385379:04/12/09 02:43:05
なるほど、知りませんでした。では値を変える方法を教えてください。お願いします
386デフォルトの名無しさん:04/12/09 02:45:52
すれ違い
387379:04/12/09 02:47:20
>>386
(゚Д゚)ハァ?、いきなりスレ違いはねぇだろカス。

では引き続き値を変える方法を教えてください。お願いします
388デフォルトの名無しさん:04/12/09 03:09:04
君には無理
389379:04/12/09 03:14:50
わからない方の低脳なレスはいりませんので
引き続き値を変える方法を教えてください。お願いします
390デフォルトの名無しさん:04/12/09 03:53:05
>379
念じろ。念じるんだ。値が変わるまでこのスレくんな。
391379:04/12/09 03:56:47
調べてみるとウィンドウハンドルの値はすべて同一の値をとっている
ようなのでIDとして有効なのはそのウィンドウが存在する間だけのようです。
どうやら、みなさん低脳なようなので自分で模索することにします
392デフォルトの名無しさん:04/12/09 04:00:10
>>391
ここの人は丁脳なので、あなたの言ってる事が理解できませんでした。
レスを強制終了します。
393デフォルトの名無しさん:04/12/09 05:20:46
変数を知らないでプログラム組めるなんて凄い。
394379:04/12/09 05:28:35
>>393
( ゚,_ゝ゚)真性の馬鹿はとっとと死ねよww
395デフォルトの名無しさん:04/12/09 07:03:31
だからさ、hwndの値がダイアログのものになってるんだろ?
396デフォルトの名無しさん:04/12/09 07:20:13
いままでダメな奴いろいろ見てきたけど
変数の値の変え方聞く奴は始めて見た。
397デフォルトの名無しさん:04/12/09 07:25:29
>396
お前分かるの?
398デフォルトの名無しさん:04/12/09 07:27:07
みんな釣られすぎ
399デフォルトの名無しさん:04/12/09 07:28:17
>>379
hwndにメインウィンドウのハンドルを代入(変数の値を変える)してください。
それで解決です。
400399:04/12/09 07:31:03
>399
代入ってどうやるんですか?
401379:04/12/09 07:31:35
すいません。>400は399じゃなくて379でした。
ご迷惑おかけして本当に申し訳ありません。
402379:04/12/09 07:41:10
>>396
言ってる意味全然わかってないでしょボクちゃん?ww
変数の値とかじゃないの。わかる?w
403379:04/12/09 07:46:18
>>399
( ゚,_ゝ゚)おめーもとっとと死ねよww
404379:04/12/09 08:40:41
解決しました。マジですいませんでした。数々の暴言と無礼をどうかお許しください
405デフォルトの名無しさん:04/12/09 08:45:03
許すわけないだろ
406359:04/12/09 10:26:35
>>404
許してほしいと思うなら、なんで解決したか言ってから帰れよ。

>>372
それは逆だス。recvしないから固まるはず。
全部recvし終えてから、sendしないと固まる可能性あり。


ところで漏れの質問はやっぱり無理ッス化。
407デフォルトの名無しさん:04/12/09 12:00:59
EXEやDLLを作り出すアプリを作るために必要な情報ご存知ありませんか?
408デフォルトの名無しさん:04/12/09 12:15:37
PEフォーマットの話か?
409デフォルトの名無しさん:04/12/09 12:37:31
コンパイラ作るのか?
それともジェネレータ(だっけ?)作るのか?
同じ挙動で数値(色とか大きさとか)だけ変えるなら、バイナリ操作だけでいけるだろ
410407:04/12/09 12:56:37
>>408,409 アドバイスありがとうございます。説明不足ですみませんでした。
ActiveScriptで制御可能なエンジン部があってそれを単一のEXEなりDLLにしたいと
思っているのですが、その後いろいろ調べてみて、以下の方法で行けそうな気が
するのですがいかがなものでしょう?それはダメだとか、普通はこうするだろなど突っ込み
いただけるとありがたいです。

1 .ダミーのリソース(スクリプトやそれが必要なリソースをパッケージしたもの)を含んだ
EXEあるいはDLLのファイルをあらかじめ用意しておく。
2. BeginUpdateResource、UpdateResource、EndUpdateResourceを使って、それを
書き換えるて、新しいEXEあるいはDLLのファイルを作成する。
3. 作ったEXEあるいはDLLのファイルの実行時、FindResource、LoadResource、LockResource
を使ってリソースからスクリプトなどを取得して実行。
411デフォルトの名無しさん:04/12/09 12:59:23
>>406
だって、そんなAPIはないから。
412デフォルトの名無しさん:04/12/09 13:06:52
>>410
exeファイルに関しては単純にランタイムのexeの後ろにゴミ(スクリプト)くっつけただけってのはよく見る
413359:04/12/09 13:07:31
>>411
ありがとう(涙
414デフォルトの名無しさん:04/12/09 14:08:04
>>413
WMIのWin32_Processクラス辺りじゃダメかな

ローカルマシンでしかやったことないけど、
WMI自体はリモートマシンにも対応してるはず・・・
415407:04/12/09 15:46:50
リソースに組み込む方法、単純にEXEの後ろに追加する方法、両方で実現できました。
ありがとうございます
416デフォルトの名無しさん:04/12/09 16:56:18
メインウィンドウをオーナーウィンドウとしたダイアログボックスで
ダイアログボックスを最小化してからメインウィンドウを最小化し
再びメインウィンドウを元にもどすとダイアログボックスも元に戻ってしまいます。
なぜでしょうか?原因を教えてくださいお願いします
417デフォルトの名無しさん:04/12/09 17:44:15
HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。
418デフォルトの名無しさん:04/12/09 17:51:38
419デフォルトの名無しさん:04/12/09 17:52:05
1 :HSP :04/04/25 23:19 ID:FQRAx6j0
HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。


2 :名前は開発中のものです。 :04/04/26 00:06 ID:Y28g2c6L
ぐふっ・・・おまえには・・・すべてをおしえた・・・みんなをまもってくれ・・・・・・・・・


3 :名前は開発中のものです。 :04/04/26 02:19 ID:PFEeis3S
ネタスレですか? 釣られませんよ。
420デフォルトの名無しさん:04/12/09 20:12:39
現在以下の処理をし、ネットワーク共有フォルダのファイルへ
書き込む処理を行っています。

1.WNetAddConnection2
2.ファイル書き込み
3.WNetCancelConnection2

書き込むPCが起動しているときは、問題なく処理できるのですが、
例えばPCの電源が入っていないときは、ネットワークを検索しているのか、
WNetAddConnection2 がエラーを返すのにすごく時間がかかってしまいます。

対策として、秒数を指定しタイムアウトしたいのですが、
設定する方法はあるのでしょうか?
421デフォルトの名無しさん:04/12/09 20:40:20
>>378
アドバイスありがとうございます。

Bitmapinfoの色情報がちゃんと入っていませんでした。
(まだ修正して試してませんが)

これから試してみます…
422デフォルトの名無しさん:04/12/09 22:25:43
DLL内の関数からCreateThread APIでスレッドを起動するプログラムを
書いているのですが、グローバル変数に保存したはずの値の一部が
消えてしまいます。

まず、以下のような構造体を定義し、グローバル変数としてこの
構造体のインスタンスを1つ用意しました。

// パラメータ
struct TEST_PARAM
{
  const char *aaa;
  const char *bbb;
  int ccc;
  const char *ddd;
  const char *eee;
  int fff;
  int ggg;
  const char *hhh;
  const char *iii;
};

// パラメータ
TEST_PARAM *g_pTestParam = new TEST_PARAM();
423422:04/12/09 22:28:45
外部プログラムからはExecTestという関数が呼ばれるようになっており、
この引数にTEST_PARAMへのポインタを受け取っています。
これをグローバル変数pTestParamに保存した後、CreateThread API
でスレッドを起動しています。

// 外部から呼ばれる関数
void _stdcall ExecTest(TEST_PARAM *pTestParam)
{
  DWORD dwTestThreadId;

  // パラメータを保存
  *g_pTestParam = *pTestParam;

  // テストスレッドを起動
  g_hTestThread =
    CreateThread(NULL, 0, TestThread, NULL, NULL, &dwTestThreadId);
}

// テストスレッド
DWORD WINAPI TestThread(LPVOID lpParam)
{
// ★★★この位置でg_pTestParamのメンバを参照すると、一部の文字列メンバが
// ★★★空っぽになっている。

  // 履歴検索実行スレッド終了
  ExitThread(0);

  // 履歴検索実行スレッド用ハンドル解放
  CloseHandle(g_hTestThread);
}
424422:04/12/09 22:31:00
ExecTest内でパラメータを保存した直後にg_pTestParamのメンバを
参照すると全て正しい値が入っていたので保存できたかに見えた
のですが、TestThread内の★★★の位置でg_pTestParamのメンバを
参照すると、一部の文字列メンバが空っぽになっていました。

そもそも*g_pTestParam = *pTestParam; という書き方がまずいのでしょうか。
メンバは整数とポインタだけなのでOKかなと思ったのですが。
おかしいところがありましたらご教授お願いします。
425422:04/12/09 22:32:17
すいません。訂正します。

誤)グローバル変数pTestParam
正)グローバル変数g_pTestParam
426デフォルトの名無しさん:04/12/09 22:49:20
>>422
aaa とかの指してる中身もコピーして保存しておけ。
strdup とか使う場合には _beginthreadex を使え。
Cライブラリを一切使わないならCreateProcess で良いけど。
427422:04/12/09 22:57:17
>426
ありがとうございます。やってみます。
428422:04/12/09 23:04:05
お騒がせしました。動きました!ありがとうございました。
429デフォルトの名無しさん:04/12/10 09:50:34
現在のOSのバージョン・SPの適用状況はGetVersionExで取得できますが、
ほかにインストールされているOSやCD-ROMのバージョン・SPの適用状況を取得するには
どのようにしたらよいでしょうか?
430デフォルトの名無しさん:04/12/10 10:05:13
CD-ROMのバージョン?
431デフォルトの名無しさん:04/12/10 11:01:19
現在起動してるOSではなく、ドライブ上にただ存在しているだけのOSの
種類やバージョンを知りたいって事?
432デフォルトの名無しさん:04/12/10 11:14:54
ext2やext3(その他色々)も読まなきゃならんのか?
433デフォルトの名無しさん:04/12/10 11:15:52
VMwareとかがインストールされていて
その中にOSがあったらそのバージョンを
知りたいんです。
434デフォルトの名無しさん:04/12/10 11:33:01
( ´_ゝ`)フーン
435デフォルトの名無しさん:04/12/10 11:34:37
何にせよ、「Win32API」の範疇の話では無いな。
436デフォルトの名無しさん:04/12/10 11:55:42
よくしらんがVMwareってディスクイメージをWindows上の単一ファイルとして
イメージ作ってたりすんじゃないの?
そうでないものはひたすらファイル読みまくってDLLのバージョンリソースでも
チェックしたら?
437429:04/12/10 14:51:41
すいません、OSというのはWindowsのことで、CD-ROMとはインストールCDのことです。
IEは特定のファイルからバージョンを取得できるのですが、
Windowsそのものについてはそのような方法を見つけられませんでした。
GetVersionEXも何らかのファイルのバージョンを返していると思うのですが、わかる方いませんか?
438デフォルトの名無しさん:04/12/10 15:19:12
version.dllとか?
439デフォルトの名無しさん:04/12/10 16:00:51
>>437
MSIとかそっち方面?
44069式フリーPG ◆hND3Lufios :04/12/10 18:59:32
>>437
これのことかいな。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/versions.asp

ちょっと文章が分かりにくい。>>429を読んで、
「OSのバージョンやSPをAPI以外に、ファイルのバージョン等から取得する方法は
ありませんか?」という意味に解釈するのは無理があるぞな。
441デフォルトの名無しさん:04/12/10 19:00:17
Windowsのバージョンって、プロンプトでverって打ったら出てくる文字列でOKか?
取得する関数があったり、レジストリからチェック出来たり、色々方法があった気がするけど
442デフォルトの名無しさん:04/12/10 19:05:46
>>441
OKじゃないよ。
443デフォルトの名無しさん:04/12/10 20:51:09
CDのディスクラベルじゃないのか?
444デフォルトの名無しさん:04/12/10 20:51:41
↑ボリュームラベル
445デフォルトの名無しさん:04/12/10 21:04:05
細かいこと言い出すと DLL のサイズだの CRC あたりまでチェックせにゃならんなw
446429:04/12/11 00:19:38
またまたすいません。
>>429ではAPIがあるかもと思って書いたのですが、
レスを見てなさそうだったので>>437で言い直しました。

>>438
>>440
ありがとうございます。でもSPの取得までは無理そうですね・・・

>>439
MSIというのがよくわかりませんが、たぶん違うと思います。

>>441
それならGetVersionExでできるのですが・・・

>>443
ボリュームラベルならGetVolumeInformationで取得できてます。

スレ違いになってきたので逝ってきます。スレ汚しすいません。
447デフォルトの名無しさん:04/12/11 04:16:18
カレントディレクトリを移動する方法を教えてください。
448デフォルトの名無しさん:04/12/11 04:23:19
>>446
サービスパックとかの情報か。レジストリに検索かけてみたら、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP
に、サービスパックとホットフィックス情報があるっぽい
449デフォルトの名無しさん:04/12/11 11:06:24
>>447
_chdir()
ワイド文字版がよければ
_wchdir()
450デフォルトの名無しさん:04/12/11 11:23:29
>>447
SetCurrentDirectory() もよろしく
451デフォルトの名無しさん:04/12/11 11:49:54
日本語を含む文字列の中から日本語を検索するときは
strstrじゃなくて_mbsstrじゃないとまずい?
452デフォルトの名無しさん:04/12/11 12:10:07
まずい
strstrでは予期せぬ物がヒットする可能性がある。
453デフォルトの名無しさん:04/12/11 12:11:04
せっかくだから _tcsstr にしたほうが。
454デフォルトの名無しさん:04/12/11 12:25:35
>>416を教えてください。お願いします
45569式フリーPG ◆hND3Lufios :04/12/11 12:30:02
Shell APIのStrStrではどうだろう。
(IE4以降が必要になるけど)
456デフォルトの名無しさん:04/12/11 12:30:18
>452
そうなんですか。どういう場合にNGになるんでしょうか。
457デフォルトの名無しさん:04/12/11 12:44:06
2バイト文字を含む場合
45869式フリーPG ◆hND3Lufios :04/12/11 12:45:05
char *p = strstr("予約", "\\");
45969式フリーPG ◆hND3Lufios :04/12/11 12:46:47
あ、日本語を検索する時の話か。スマソ。>>458は忘れて。
460デフォルトの名無しさん:04/12/11 13:00:39
>457
試しに "aaaaaaあいうえおbbbbb" の中から "あいうえお" を
検索してみたら問題なかったのですが、例えば特定の文字コードを
含む文字が含まれているときはうまくいかないことがある、
みたいなことなんでしょうか。
461デフォルトの名無しさん:04/12/11 13:20:50
>>460
char *p = strstr("例文", "癜");
たとえばこんなのがヒットしてしまう。
462461:04/12/11 13:21:58
おっと補足。
>>461は文字コードがShift_JISの場合だからな。
463デフォルトの名無しさん:04/12/11 13:23:20
>461
おお、ありがとうございます。文字コードで見ると
97 E1 95 B6 から
E1 95 を
探すからヒットしちゃうってことですね。
464デフォルトの名無しさん:04/12/11 13:24:37
>463
この辺の問題が_mbsstrにすれば解決するんですかね。
ちなみに>453さんの_tcsstrはどういうときに使うのでしょうか。
465477:04/12/11 13:28:26
>449>450
ありがとうございました。
46669式フリーPG ◆hND3Lufios :04/12/11 14:21:30
>>464
_tcsstrだと、_MBCSが定義されていれば_mbsstrに_UNICODEが定義されていれば
wcsstrにプリプロセッサが置換する。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_generic.2d.text_mappings_in_tchar..h.asp
467デフォルトの名無しさん:04/12/11 16:33:15
そういえば、Win32プログラムを作ってて
カレントディレクトリを気にすることってあまりないよね。
468デフォルトの名無しさん:04/12/11 17:24:41
>>467
カレントディレクトリをリネームとか
削除しようとすると問題になるよ
469デフォルトの名無しさん:04/12/11 17:26:11
>468
>467が言っているのはそういうことじゃないと思う。
470デフォルトの名無しさん:04/12/11 17:58:11
>>468
そもそもそんなどんなときにそんな事態が発生するというのか
471デフォルトの名無しさん:04/12/11 18:19:49
フルパスで指定しなければ、ファイルを開くのもディレクトリを操作するのも
カレントディレクトリを対象にするんじゃないか?
472デフォルトの名無しさん:04/12/11 18:22:14
>>416 >>454
自信ないけど、たぶん仕様だと思うよ。
俺も昔、同じ現象に悩まされたことがあって、結局オーナーをNULLにすることで解決したような…
473デフォルトの名無しさん:04/12/11 18:28:52
>>471
そうだよ。でもたいていフルパスで指定するよねって話だと思う。
474デフォルトの名無しさん:04/12/11 18:41:13
フルパスじゃないと基準がないしな。
一度ファイルオープンダイアログ開いた時点でカレントはそのフォルダにチェンジされちゃうしな。

ところでアプリケーションがある位置をアプリ起動時にカレントのフルパスを保存することで
とっといてるけどこれってまずい?
475デフォルトの名無しさん:04/12/11 18:58:09
Win32プログラムというかGUIプログラムってことなんだろう。きっと。
Win32だったとしてもコンソールアプリは普通カレントディレクトリを基準にするっしょ
476デフォルトの名無しさん:04/12/11 19:08:12
>>474
まずい
477デフォルトの名無しさん:04/12/11 19:19:20
>476
なんで?
478デフォルトの名無しさん:04/12/11 19:43:38
ダイアログはレジストリを見てる
カレントではない
479デフォルトの名無しさん:04/12/11 19:57:11
>>477
アプリが存在するディレクトリとカレントディレクトリは一致しないから。

簡単に試せる方法としては、アプリのショートカットファイルをつくって
そのプロパティで作業フォルダを変更してみること。
480デフォルトの名無しさん:04/12/11 19:59:40
>479
なるほど
481デフォルトの名無しさん:04/12/11 20:20:34
>>479
じゃあ、アプリケーションの位置ってどうやって特定すればいいですか?
482デフォルトの名無しさん:04/12/11 20:37:25
>>481
GetModuleFileName(NULL, filename, length)
483デフォルトの名無しさん:04/12/11 20:47:31
>482
さすが!
484481:04/12/11 20:53:39
>>482
おお!
ありがとうございます!
485デフォルトの名無しさん:04/12/11 22:39:40
>474etc
それって恥ずかしくないか?
486デフォルトの名無しさん:04/12/11 23:05:03
BOOL GetOpenFileName(LPOPENFILENAME lpofn);
みたいに、ポインタをダイアログに渡して、そのポインタ先にデータを取得するダイアログってどうやって作ってるんですか?
int DialogBox(HINSTANCE hInstance , LPCTSTR lpTemplate ,HWND hWndParent , DLGPROC lpDialogFunc);
には、ポインタを渡せるような引数は無いのですが…
487デフォルトの名無しさん:04/12/11 23:08:25
DialogBoxParam()
488デフォルトの名無しさん:04/12/11 23:15:44
>>486
487 の提案が順当な線だが、
WM_INITDIALOG でオーナーに SendMessage という手もある
489デフォルトの名無しさん:04/12/11 23:26:28
>>487
おお、こんなのがあったのか。DialogBox使ってどうやるのかずっと考えてた
ありがとうございます。

>>488
モーダルダイアログって、親ウィンドウはキー入力とか受け付けなくなるけど、SendMessageは受け付けるんですか?

自分では、GetWindowLongのGWL_USERDATAとかみたいに、関数使って無理やり保持させる方法とか考えてた…
490デフォルトの名無しさん:04/12/11 23:28:04
>>489
逆にダイアログから親ウィンドウへSendMessageするっていうこと。
491デフォルトの名無しさん:04/12/11 23:33:11
>>489
DialogBox() とか DialogBoxParam() は、内部に独自のメッセージループを持っているので、
親ウィンドウのプロシージャもずっとメッセージを受け取れる状態になってるよ。
492359:04/12/12 01:22:03
>>414
↓のコードでWMIを使ってやってみたらローカルマシンでは動作しました。

ServerName = "\\Optiplex-Gx1"
Set ServiceSet = GetObject("winmgmts:" & ServerName).ExecQuery("select * from Win32_Process")
for each Service in ServiceSet
  Call Service.GetOwner(strOwner, strDomain)
  WScript.Echo Service.Name & "," & strDomain & "\" & strOwner
Next
Set Service = Nothing
Set ServiceSet = Nothing

これをリモートマシンでも試してみます!
ありがとうございます!
493デフォルトの名無しさん:04/12/12 02:27:08
>>490
それは分かってたんですが…

>>491
メッセージ自体はOKなんですね。参考になりました。
(たぶん大丈夫だけど、メッセージは一切受け付けないつもりで実装してたんで、特定の動作で不都合が出てきてりするかも…調べてみます…)
RasHangupで回線を切断させるのに15秒くらいかかってしまうのですが、
これってもっと時間短縮できないのでしょうかねぇ。
接続元の環境はWinXPマシンにINSボード突っ込んで、ISDN回線使ってます。
接続先はYAMAHAのルータです。
495デフォルトの名無しさん:04/12/12 05:20:40
それはわざと時間掛かるようになってます。
496494:04/12/12 08:53:09
>>495
あー、そうなんですかぁ。残念。
レス、さんくすです。
497デフォルトの名無しさん:04/12/12 10:23:12
すいません初歩的な質問です。
ネットワークコマンドでnbtstatがありますよね。
このコマンドの中で動いてるAPI関数を知りたいのです。
Pingなどの中身は自力でわかったのですが
どうしてもわかりません。
498デフォルトの名無しさん:04/12/12 10:41:08
>497
>Pingなどの中身は自力でわかったのですが
すげー。よければ教えてください。
499デフォルトの名無しさん:04/12/12 11:07:46
>>498
パケットキャプチャーすれば、わかるだろ。
50069式フリーPG ◆hND3Lufios :04/12/12 11:15:01
IP Helper APIの組み合わせでできるんじゃないかな。
arpもつくれるはず。
501デフォルトの名無しさん:04/12/12 11:22:43
>499
え?パケットキャプチャーでAPI関数の名前が分かるんですか?
502デフォルトの名無しさん:04/12/12 11:29:20
>>501
分からない。
デバッガか逆アセンブラを使うとよい。
デバッガではOllyDBGがオススメ。
逆アセンブラではdiswinやdispeが主流。
どれもフリーソフトなので試してみれ。

ま、APIの名前が知りたいだけならメモ帳で開いたら分かるけど。
503デフォルトの名無しさん:04/12/12 11:30:50
最近のパケットキャプチャーは使ってる API まで表示してくれるのか、すげーな。

>>497
とりあえず、nbtstat.exe の中からそれっぽい文字列をひらってみた。

WSOCK32.dll ws2_32.DLL MSWSOCK.DLL USER32.dll ntdll.dll MSVCRT.dll ADVAPI32.dll KERNEL32.dll
HrLanConnectionNameFromGuidOrPath netman.dll system\currentcontrolset\services\netbt\parameters
\Device\NetBt_Wins_Export WSOCK32.dll OemToCharBuffA USER32.dll vsprintf NtClose sprintf atoi
isprint memmove RtlUpcaseUnicodeStringToOemString RtlInitUnicodeString RtlFreeAnsiString strncpy
RtlUnicodeStringToAnsiString RtlFreeUnicodeString NtCreateFile RtlAnsiStringToUnicodeString
RtlInitString NtWaitForSingleObject NtDeviceIoControlFile RtlExtendedLargeIntegerDivide ntdll.dll
exit _write _exit _XcptFilter __p___initenv __getmainargs _initterm __setusermatherr _adjust_fdiv
__p__commode __p__fmode __set_app_type _except_handler3 MSVCRT.dll _controlfp RegCloseKey
RegQueryValueExA RegOpenKeyExA ADVAPI32.dll WideCharToMultiByte MultiByteToWideChar
Sleep GetProcAddress LoadLibraryA FreeLibrary LocalFree LocalAlloc FormatMessageA
KERNEL32.dll CharToOemBuffA exe\nbtstat.dbg
504デフォルトの名無しさん:04/12/12 11:32:17
>>500
他のPCのOSの種類とユーザー名を
取得しようと思ってるのですが、
APIがまだ見つかりません・・・
505デフォルトの名無しさん:04/12/12 13:02:49
ネーヨ。
そんなもん。
506デフォルトの名無しさん:04/12/12 13:07:34
(´゚c_,゚` )まぁまぁ
507デフォルトの名無しさん:04/12/12 13:10:26
今gtk+で音声を再生させるプログラムを作成してるとこなんですけど、わかる人がいたら教えてください。フローチャートでできるだけわかりやすく書いてくれたらありがたいです。
508デフォルトの名無しさん:04/12/12 13:19:25
PlaySound()というAPIを一回呼ぶだけでOK
509デフォルトの名無しさん:04/12/12 13:29:39
>>507
>フローチャートでできるだけわかりやすく
殺意がわいたw
510デフォルトの名無しさん:04/12/12 13:41:34
>509
理由は?フローチャートで分かりやすくよろしく。
511デフォルトの名無しさん:04/12/12 14:29:31
まず本人がフローチャートで回答用テンプレを用意すべきだな
512デフォルトの名無しさん:04/12/12 14:51:20

┌───┴──┐
│PlaySound ( ) │
└───┬──┘
513デフォルトの名無しさん:04/12/12 14:52:33
釣られすぎだゾ
514デフォルトの名無しさん:04/12/12 15:19:26
>>497
デペンデンシーウォカーでも
515497:04/12/12 15:31:33
>>514
それは何でしょうか?

初心者なんで変な質問してしまいすいません。
ただたんにネットワーク上の他端末の端末名やワークグループ名を
取得したいのですけどnbtstatコマンド以外で
可能なのか知りたいのです。
516デフォルトの名無しさん:04/12/12 15:39:13
>>515
どんなDLLに依存(ディペンデント)しているか見るツール。
517デフォルトの名無しさん:04/12/12 15:40:43
518デフォルトの名無しさん:04/12/12 15:43:12
なんでdependsを真っ先に挙げないのか不思議なスレですね。

Windowsのリソースキットに、プロセスが呼び出しているAPIを調べるツールがあります。
519デフォルトの名無しさん:04/12/12 15:43:39
>>516
なんでそんな無駄にスレが伸びそうな教え方するんだ。
520デフォルトの名無しさん:04/12/12 16:01:14
アプリケーションが外部DLLのどんな関数に動的リンクしているか調べるツール
これでnbtstatを調べれば、nbtstatがどんなAPIを使用しているかすぐにわかる
521VC++:04/12/12 16:35:46
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。
そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。
私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。
私の使い方が悪いのでしょうか?
どなたか教えていただけないでしょうか?
 <コーディング>
    w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL);
    w_ret = GetDeviceCaps(w_hdc, HORZSIZE);
522デフォルトの名無しさん:04/12/12 16:37:00
>>521
>私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。

ならない。
以上。
523VC++:04/12/12 16:37:04
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。
そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。
私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。
私の使い方が悪いのでしょうか?
どなたか教えていただけないでしょうか?
 <コーディング>
    w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL);
    w_ret = GetDeviceCaps(w_hdc, HORZSIZE);
524VC++:04/12/12 16:40:39
>>522
インチ当たりのピクセル数から割り出す方法を使うのでしょうか?
もっと簡単な方法は無いのでしょうか?
知っていたら教えていただけないでしょうか?
525デフォルトの名無しさん:04/12/12 17:11:04
>>515
> ただたんにネットワーク上の他端末の端末名やワークグループ名を
> 取得したいのですけどnbtstatコマンド以外で

何がしたいのか今ひとつ掴めないがnet view 相当でよければ
WNetEnumResource あたりとか。
526デフォルトの名無しさん:04/12/12 17:16:57
527デフォルトの名無しさん:04/12/12 17:18:27
Comctl32.dllやcommctrl.hなどの最新のものはどこからダウンロードできるのでしょうか?
Microsoftのサイトをかなり探したのですが、どれをインストールしても更新されませんでした。
528デフォルトの名無しさん:04/12/12 17:46:45
>>527
Comctl32.dllは最新のIEやそのパッチをあてればいい。
commctrl.hは>>2のPlatform SDKから
529デフォルトの名無しさん:04/12/12 17:47:40
>>528
ありがとうございます
早速いってみます
530デフォルトの名無しさん:04/12/12 17:48:05
>524
1ピクセルの物理的な寸法を得る手段がないので
あきらめるしか無いヌー

あるいは、ユーザーに「ディスプレイの正確なdpiを計測してください」と頼むか。
531デフォルトの名無しさん:04/12/12 18:08:34
>>530
アプリごとに実装してたらスーパー馬鹿野郎だな
そーゆーのはOSが持つべき機能
532デフォルトの名無しさん:04/12/12 18:32:21
>531
穏やかに行こうぜ。
533デフォルトの名無しさん:04/12/12 18:48:36
すいません、もう一つだけ質問させてください
Platform SDKをダウンロードして
Program FilesフォルダにMicrosoft SDKがフォルダが出来たのですが、
この中身のLib、includeを全て適当にコピーして使ってもいいものなのでしょうか?
何か正しい使い方がありましたら教えていただけませんか?
534デフォルトの名無しさん:04/12/12 18:58:55
>>533
コピーするのではなく、インクルードファイルのディレクトリ設定や
ライブラリファイルのディレクトリ設定を追加するほうがいい。
既存のディレクトリよりも優先されるように順番に注意すること。
535デフォルトの名無しさん:04/12/12 19:14:02
>>534
分かりました、本当にありがとうございました
536デフォルトの名無しさん:04/12/12 19:15:46
教えてください.

プログラムが実際に消費した時間を計測したいです.
今のところ GetProcessTimes() や GetThreadTimes() を使って
ますが,Win95系のバージョンでは使えないので困ってます.

よろしくお願いします.
537デフォルトの名無しさん:04/12/12 19:34:04
>536
「実際に消費」というのはもっと具体的に言うとどういうこと?
実際にかかった時間のこと?
538デフォルトの名無しさん:04/12/12 19:40:39
>> 537
実際に CPU を使用して計算した時間を知りたいです.
いわゆる elapsed time のほうではないっす.
539デフォルトの名無しさん:04/12/12 19:44:43
BCCで簡単な画像編集アプリを作りたいんですが
一般的なキャンバスの仕組みが分かりません。
灰色の背景に白地のキャンバスエリアだとして、ただ白の短形を描画して
その上から線を引くとしたら白の短形を再描画した時消えるし
どう作ればいいのでしょうか?
保存する時はクライアントエリア上に直接描かれた絵を1ピクセルずつ色を
キャプチャして保存するような感じでいいのですか?
リンク探しても、それっぽい内容が見当たりません。
どなたか教えてください。
540デフォルトの名無しさん:04/12/12 19:48:16
たんけい選択
541デフォルトの名無しさん:04/12/12 19:54:55
短形
542デフォルトの名無しさん:04/12/12 19:56:10
たんけいコピー
543デフォルトの名無しさん:04/12/12 19:56:30
短茎
544デフォルトの名無しさん:04/12/12 19:58:37
マジワロタ
545デフォルトの名無しさん:04/12/12 20:00:36
ググったら結構見つかったよ、短形(w
546デフォルトの名無しさん:04/12/12 20:00:53
(・∀・)タンケイ!
547デフォルトの名無しさん:04/12/12 20:05:37
>>539
ダブルバッファリング
548VC++:04/12/12 20:27:57
>>530
おっしゃる通りみたいでした。
dpiから画面の物理サイズを計測してみたんですが、やはり同じでした・・・。
実際のサイズを知る手段が無いみたいですね。
ありがとうございました。
549デフォルトの名無しさん:04/12/12 20:38:07
巨と豆の区別もつかないらしい
550デフォルトの名無しさん:04/12/12 20:41:40
ホントにたんけいだと思ってる奴は俺の周りにも
結構いる。仕方ないよ。
551デフォルトの名無しさん:04/12/12 20:46:15
巨乳と豆乳の区別はつくぞ。
552デフォルトの名無しさん:04/12/12 20:47:12
∩(・ω・ )∩ 短形 ばんじゃーい
553539:04/12/12 20:55:30
あれ? 四角形って短形って言わんのか(;´Д`)

>547
ググったけどよく分かりません。「ちらつきをなくす効果」ですよね?
白地に線を引く(Ellipseなどでマウスクリックで描画し続ける)としたら
白を再描画するとクリックした位置はユーザー任意なので線が消えてしまうって事なんですけど。
位置を記録したとしても、描くほど動作が不安定になりそうだし。
554デフォルトの名無しさん:04/12/12 21:00:57
市販のライブラリでも使っとけ。

で、四角形は矩形(くけい)だ。
555デフォルトの名無しさん:04/12/12 21:09:14
>553
>あれ? 四角形って短形って言わんのか(;´Д`)
どんまい。俺も最初読めなかったよ。
学校で習わないもんな。
556デフォルトの名無しさん:04/12/12 21:14:14
>>553
信じられん。コメントのしようがない
557デフォルトの名無しさん:04/12/12 21:22:32
>>553
CreateCompatibleDC
558デフォルトの名無しさん:04/12/12 21:29:56
>>553
線を追加するたびに、キャンバスのイメージを
バッファ(HBITMAP)に保存しといて、
WM_PAINTが来たときには、バッファの内容を描画する。
559539:04/12/12 21:38:18
>554 ドウモゴシンセツニ。
>555 もう短形でもいいじゃん。
>556 してるじゃん。
>557-558
ありがとうございます。
理屈は何となく理解できました。
560デフォルトの名無しさん:04/12/12 21:47:10
>>551
何となく頷いてしまった。君は鋭いね。
561297:04/12/12 22:06:20
BCCを使っています
SendInputとかの関数の中身(どうコーディングされているか)を見たいのですが、
WinAPIを使うときにインクルードしているファイルを見ても
SendInput(
IN UINT cInputs, // number of input in the array
IN LPINPUT pInputs, // array of inputs
IN int cbSize); // sizeof(INPUT)
としかなっていませんが、実際の動作はCではコーディングされてないのでしょうか?
どんな動作をしているのか見たいのですが、そのような時はどういう風に調べれば
よいのでしょうか
ヒントだけでもいいので教えてください
検索方法が悪いのか、たいした情報が出てきません・・・
562デフォルトの名無しさん:04/12/12 22:06:58
申し訳ありません、名前欄は無視してください (;´Д`)
563デフォルトの名無しさん:04/12/12 22:11:15
>>561
好きなの選べ。

・インターフェイスと動作が分かれば十分。MSDNで調べる。
・あきらめる。
・MSとNDA結んでソース見せてもらう。
・リバースエンジニアリングしてもいい国に行く。
・Wineみたいな互換ライブラリの実装から類推する。
564デフォルトの名無しさん:04/12/12 22:12:10
>>561
実際のコードは%WINDIR%\SYSTEMの中にDLLとして収められている。
(MSDNのSendInputの項を見ると「インポートライブラリ:user32.lib を使用」と書いてあるのでSendInputはUser32.dllにある)
当然Cのソースコードとして読むことは不可能。
せいぜい逆アセンブルするまでしかできない。
565563:04/12/12 22:27:47
すいません。どうかしてました。訂正します。

私の拙い知識で思いつく限りでは、以下の方法が考えられます。

・インターフェイスと動作が分かれば十分。MSDNで調べる。
・あきらめる。
・MSとNDA結んでソース見せてもらう。
・リバースエンジニアリングしてもいい国に行く。
・Wineみたいな互換ライブラリの実装から類推する。

566497:04/12/12 22:59:39
教えていただいたツールを使って
NBTSTATを解析して調査してみます。
すごく・・・便利なルーツですね。
567デフォルトの名無しさん:04/12/12 23:05:57
ここはマ板じゃないんだけどなぁ・・・ネタは程々に。
568デフォルトの名無しさん:04/12/12 23:11:32
>566
ルーツ?
569デフォルトの名無しさん:04/12/12 23:34:22
570デフォルトの名無しさん:04/12/12 23:45:19
くんたきんて
571デフォルトの名無しさん:04/12/12 23:53:14
572デフォルトの名無しさん:04/12/12 23:58:38
>>497
なんか出遅れちゃったけど。。。
netstat を調べたいなら、同様のフリーウェアをあたるのが一番。
ttp://www.sysinternals.com/ntw2k/source/tcpview.shtml
ソースつき。
573デフォルトの名無しさん:04/12/13 00:06:05
netstat ≠ nbtstat
574497:04/12/13 00:18:49
みなさん、いろいろすいませんね。

自分の組織にあったネットワーク管理ツールを作ってまして
VC言語の作り方忘れたので、VB6でAPI使ってます。
マルチプロセスで動かすのでちゃんと動くか怖いですけどね。
575デフォルトの名無しさん:04/12/13 00:34:40
576デフォルトの名無しさん:04/12/13 00:38:45
>>574
作るまでもないだろ
577デフォルトの名無しさん:04/12/13 00:57:15
C++板で質問しましたら誘導されたのでここで質問させてください。
http://pc5.2ch.net/test/read.cgi/tech/1101473340/359-360

内容は
>wmpの視覚エフェクトを自分で作っているのですが、
>現在再生中のファイル名と
>再生した経過時間を取得するにはどうすればいいでしょうか。。
>
>板違いだと思うのですが、どこで聞いてよいか分からなくて、、、
>どなたかご教授ください。
578497:04/12/13 01:00:09
うちの組織にあったDBで管理できるものもないし、
自分の勉強の為ででもあります。
579デフォルトの名無しさん:04/12/13 01:48:10
自分が食ってるメモリを取得する方法はあるかね
580デフォルトの名無しさん:04/12/13 02:26:30
>>577
DirectShow使ってる?もしそうなら↓へ。
DirectShowと戦うスレ
http://pc5.2ch.net/test/read.cgi/tech/1026666092/
581デフォルトの名無しさん:04/12/13 04:20:42
>>563-564
レスありがとうございます
良くわかりました
Wineっていうのを調べてみます
ありがとうございました
582デフォルトの名無しさん:04/12/13 07:12:02
ShellExecuteとCreateProcessを使って
他のプログラムを起動しているのですが、
メモ帳が「notepad」で開けるのですがこれは何故でしょうか?
IEをプログラムの名前だけで開きたいのですがどうすればいいでしょうか?
583デフォルトの名無しさん:04/12/13 07:13:53
>582
パスが通ってるから。
584デフォルトの名無しさん:04/12/13 07:36:03
>>583
それはどこかに定義してあるのでしょうか?
また、IEの場合はなんといれればよいのでしょうか?
585デフォルトの名無しさん:04/12/13 08:35:07
>>579
GlobalMemoryStatus(Ex)
586デフォルトの名無しさん:04/12/13 08:41:59
>>584
iexplore
587デフォルトの名無しさん:04/12/13 11:41:38
EnumWindowsをコールして、コールバック関数内では
GetWindowThreadProcessIdを使ってプロセスIDを求めたいんだけど、
なぜかGetWindowThreadProcessIdで異常終了してしまう

OSはWindows2000
心当たりある人いませんか?
588デフォルトの名無しさん:04/12/13 11:48:10
_beginthread(あるいは_beginthreadex)が返すハンドルに対して
SuspendThreadやResumeThreadを使うのはOKなんですか?
一応期待した挙動はしているみたいなんですが、
MSDNにはそれらしい記述が見つからないので教えてプリーズ。
589デフォルトの名無しさん:04/12/13 11:52:01
>>588
ソース読んでみたら?
590デフォルトの名無しさん:04/12/13 12:12:09
>>588
ex 付きの方は OK。
591デフォルトの名無しさん:04/12/13 12:17:13
C ランタイム ライブラリのデータ構造体へアクセス中のスレッドがあって、
それの完了を待っている複数のスレッドが存在する場合に SuspendThread を使うと、
デッドロック状態になります。
592デフォルトの名無しさん:04/12/13 13:30:34
>>591
_beginthreadexの方でも?
解決する方法はありますか?
C ランタイム ライブラリを呼ばないとか呼ぶときは排他制御するとかの泥臭い方法しかないですか?
593デフォルトの名無しさん:04/12/13 13:46:28
>>592
ISBN4-7561-1404-0
198ページ
594デフォルトの名無しさん:04/12/13 13:51:15
>>593
高いよ。
595デフォルトの名無しさん:04/12/13 13:54:02
>>592
スレッド管理する場合は、
もっと大きめの単位で待ち合わせとかするのが普通のような気が。
先方が何してるんだかわからない状況で SuspendThread は乱暴・・・
というかそんなパターンあまり便う場面なくない?
596デフォルトの名無しさん:04/12/13 13:54:21
そもそも SuspendThread() 自体が、よほどのことがない限り使っては
いけない API です。使いこなすのは難しい。

597デフォルトの名無しさん:04/12/13 14:05:56
>>>596
確かに。自分自身をSuspendThreadするってケースでしか使わないなぁ・・・
598デフォルトの名無しさん:04/12/13 15:00:40
>>587
ソース見せて。
CALLBACK キーワードがついてないとか?
599デフォルトの名無しさん:04/12/13 20:58:08
VB6.0で作った画面からVC6.0で作ったDLLを呼び出す際、
引数にVBの関数のポインタを渡し、DLLからそれを
コールするような処理を書いてみました。

問題なくコールできたのですが、DLL内でスレッドを生成し、
そのスレッド内からコールすると、「ハンドルできない例外」が
発生してしまいます。このような呼び出し方はやっては
いけないことなのでしょうか。
600デフォルトの名無しさん:04/12/13 20:58:50
>599
ちなみにデバッグで起動すると問題ないのですが、
VBでexeを作って起動すると失敗します。
601デフォルトの名無しさん:04/12/13 21:00:50
>599-600
すいません。勢い余ってここに投稿してしまいましたが、
よく考えたらスレ違いでした。>599-600は取り下げ
させてください。VBスレの方で質問しなおします。
602デフォルトの名無しさん:04/12/13 21:05:34
DLLで生成したスレッドから何をコールしたんだろう(´Д`;)
VBスレのほうではちゃんと質問内容を明確にしてね
603デフォルトの名無しさん:04/12/13 21:06:44
VBの関数かorz
60469式フリーPG ◆hND3Lufios :04/12/13 21:14:42
VB6はSTAなんだな。
605デフォルトの名無しさん:04/12/14 01:30:41
>>586
それでやったんですができませんでした。
ファイル名を指定して実行するウィンドウではそれで起動できるのですが、
ShellExecuteやCreateProcessだと起動しませんでした。
606デフォルトの名無しさん:04/12/14 02:24:44
CLSIDを"CLSID_InternetExplorer"に指定して
CoCreateInstance()を呼べばいいと思う。
607デフォルトの名無しさん:04/12/14 03:20:26
QueryPerformanceCounterについて教えてください。

Googleで検索すると、さも当たり前に使うAPIのように紹介されていますが、
MSDNライブラリの注意書にあるとおり、私のPCではサポートされていませんでした。

これが普通に使える方、どんなハードウェアを使っているのか教えてください。
608デフォルトの名無しさん:04/12/14 03:25:40
インストールされているハードウェアが高分解能パフォーマンスカウンタをサポートしている場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。
609デフォルトの名無しさん:04/12/14 03:42:14
>>607
RDTSC命令が使えるCPU(Pentium以降)なら大丈夫らしい
ttp://yosirin9.hp.infoseek.co.jp/tips/no1/tips_no1.htm
610デフォルトの名無しさん:04/12/14 08:48:52
サービスのことで質問があります。
メモリマップドファイルでユーザー権限で動いているEXEと通信しようとしてるのですが、
MapOfViewの段階で失敗します。
両方とも通常のアプリなら問題は発生しません。
環境はW2kPro+VS.NET2003、サービスはATLウィザードで作ったものほぼそのままで、
メモリマップドファイルを作成するロジックのみを追加しています。
よろしくお願いします。
611デフォルトの名無しさん:04/12/14 09:13:31
>>607
QueryPerformanceCounterがサポートされていない>>607
ハードウェアも教えてほしい。
612デフォルトの名無しさん:04/12/14 10:39:05
>>611
3台試しました

1台目
CPU : AthlonMP (Palominoコア)
マザーボード: TYAN TigerMP (BIOS 1.05)
HALはACPIマルチプロセッサです

2台目
CPU : Pentium3 (Coppoermineコア)
マザーボード: 不明 hp Visualize X-CLASS
HALはACPIマルチプロセッサです

3台目
CPU : Pentium4 (Northwoodコア)
マザーボード: Intel D845GERG2-LK (BIOS P12 (RG84510A.86A.0022.P12.0211151511))
HALはACPIユニプロセッサです

RDTSC命令を直接叩いてみます。
デュアルのマシンはプロセッサのアフィニティを設定しないとヤバそうですね。
613デフォルトの名無しさん:04/12/14 10:42:25
彼は寝たっぽい
614デフォルトの名無しさん:04/12/14 15:57:28
>>612
コーディングが間違ってるって事はない?
615デフォルトの名無しさん:04/12/14 20:55:42
Windowを最初から最大化した状態で起動したいのですが、
SW_SHOWMAXIMIZEDを使わずにやる方法は無いでしょうか

SW_SHOWMAXIMIZEDだと、初期化前に表示しちゃうもんで…
SW_HIDEMAXIMIZEDなんてのがあれば良かったんですが
616デフォルトの名無しさん:04/12/14 21:26:03
>>615
初期化してからShowWindowすればいいじゃない
617デフォルトの名無しさん:04/12/14 21:45:30
>>616
それが、初期化の際、最大化した状態でのWindowの情報が色々欲しかったりで。
別に初期化前に見せてしまっても良いのですが、どうにも見栄えが悪いんですよね。
618デフォルトの名無しさん:04/12/14 21:55:49
>>617
サイズが必要な初期化は WM_SIZE でやればいいのでは?
(WM_SIZE は cx = cy = 0 で呼ばれることあるから注意)
619615=617:04/12/14 22:29:40
すいません、次のようになっちゃうのがそもそもの悩みでして

初期化は絶対しなければなので初期化する
>初期化後に最大化
>WM_SIZEでまたサイズ変更処理(初期化の処理と一部かぶる)をしなければ

そんなわけで、上手く最大化して起動できれば二度やらずに
済むと思ったのですが、SW_SHOWMAXIMIZED以外には無さそうですね。

>>618
二度やるのが多少気持ちが悪い程度なので、それで行きたいと思います。
cx = cy = 0の件は初耳で全く考慮してなかったので、気をつけます。
616さん、618さん、レスありがとうございました。
620デフォルトの名無しさん:04/12/14 22:51:39
>>619
ValidateRectしてからSHOW_MAXMIZEDで誤魔化せない?
621デフォルトの名無しさん:04/12/14 22:54:02
フルパスをあるディレクトリを基準とする相対パスに変換するAPI
逆に基準ディレクトリと相対パスからフルパスを生成するAPIはないでしょうか。
例えば、c:\aaa\bbb\ccc.txt(フルパス) と c:\aaa\ddd\(基準) から ..\bbb\ccc.txt(相対パス)
とその逆の操作です。
622デフォルトの名無しさん:04/12/14 23:02:44
_beginthreadで作成したスレッドの中で、LIBCMT.LIBやMSVCRT.LIBを
リンクせずにCのランタイムライブラリを呼び出すのはNGでしょうか。
623デフォルトの名無しさん:04/12/14 23:13:13
>>620
レスありがとうございます
試して、さらにすぐ隠したりしてみたのですが、やはり表示されちゃうみたいです。
624デフォルトの名無しさん:04/12/14 23:32:24
>>622
> LIBCMT.LIBやMSVCRT.LIBを
> リンクせずにCのランタイムライブラリを呼び出すのは

どうやってやるんだ?
625デフォルトの名無しさん:04/12/14 23:32:45
>>621
Shell APIでよければ
PathRelativePathTo()
PathCanonicalize()
とか?
他にもPath〜()調べてごらん
626デフォルトの名無しさん:04/12/14 23:37:59
>624
え?普通に呼べましたよ。でもアウトプットウィンドウを見たら、
MSVCRT.LIBはロードされていました。
627デフォルトの名無しさん:04/12/14 23:44:29
>>626
リンクせずにって書いたんじゃないのかよ。
で、結局リンクされてたら世話ないわ。
628デフォルトの名無しさん:04/12/15 00:15:50
>>623
WS_MAXIMIZED
629デフォルトの名無しさん:04/12/15 00:23:49
>627
すいません。「リンクせずに」と書いたのは、
プロジェクト→設定→リンク→オブジェクト/ライブラリモジュールに
明示的に指定せずに、ということでした。
「デフォルトライブラリを全て無視」のチェックは付けて
なかったのでリンクされたんですかね。
630デフォルトの名無しさん:04/12/15 00:24:37
>>627
普通にLIBC.LIBをリンクすりゃできるだろうが。
631デフォルトの名無しさん:04/12/15 00:34:16
>>628
否定的な事ばかり言ってすいません。
しかしこのWS_MAXIMIZEがどうにも効かなくて困ったのがそもそもの始まりでした。

検索したところ、MDIの子ウィンドウにのみ意味があるという記述があって
早々に諦めてしまったのですが、なにか私が大ポカをやらかしている気もします。

WS_MAXIMIZEで普通に最大化起動できるよ?みたいなレスを頂ければ幸いです。
632デフォルトの名無しさん:04/12/15 00:43:09
>>631
その後表示するときShowWindowに渡してるフラグは?
633デフォルトの名無しさん:04/12/15 00:43:15
LIBCMT.LIBリンクしないと_beginthreadは使えないんではなかろか
634デフォルトの名無しさん:04/12/15 00:49:39
>>632
なるほどー!そういう事でしたか。
WS_MAXIMIZEの時は、起動時の引数をそのまま渡していました。

WS_MAXIMIZEで作成すれば、ShowWindowの前にちゃんと、最大化されたWindowの情報拾えますね。
お恥ずかしい限りです。しかしすっかり諦めていた所なので本当に嬉しいです。
ありがとうございました。
635621:04/12/15 01:13:15
>>625
ありがとう。それでいけそうdeath。
636607:04/12/15 01:43:46
CPUのパフォーマンスカウンタの件、アドバイスありがとうございます。

諦めて消したコードを書き直してみたら、値を取得することができました。
いったい何が原因だったのか、わからずです。

QueryPerformanceCounterを呼ぶと1000クロックくらい経過してしまうので、
RDTSC命令を直接呼ぶことにしました。これだとオーバーヘッドは60クロックくらいで済みました。

お騒がせしてすみませんでした。
637デフォルトの名無しさん:04/12/15 07:23:54
>633
すまん。出直してくる。
638デフォルトの名無しさん:04/12/15 10:51:33
 VC++でコンソールを扱うクラスを作ろうとしているのですが,
コンソールのハンドラルーチンがうまくクラス化できなくて悩んでいます.
 SetConsoleCtrlHandlerでハンドラを設定するのですが,
スタティックな関数しか指定できません.
 そこで,ウィンドウやスレッドのサブクラス化でやられるようにコンソールクラスの
thisを隠しておいてジャンプさせようとしたのですが,
SetConsoleHandlerの引数は関数のアドレスとハンドラを追加するか削除するかのブール値の二つ,
HandlerRoutineに渡されるのは信号の種類を表すDWORD値一つだけで,
このthisを隠しておく場所が見当たらないのです.
 良い方法がありましたらお願いします.
639デフォルトの名無しさん:04/12/15 11:12:51
>>638
サンクとか。
ATLのCWindowImplとか参考になるかも。
640デフォルトの名無しさん:04/12/15 11:24:14
DATETIMEPICKERコントロールからのデータの取得は
GetWindowTextで取得できたのですが、
データの設定がSetWindowTextで出来ません
何か固定のデータ形式か専用の別の設定する関数があるのでしょうか?
テキストは"2004/12/15"という感じで設定しようとしたのですが、ダメでした
641デフォルトの名無しさん:04/12/15 11:31:44
>>638
DWORD 値から、インスタンスのポインタとメンバ関数ポインタの組 or boost::function へのmapを
持てばいいんじゃない?
642638:04/12/15 11:49:36
>>639
すばやいご返事ありがとうございます.
ちょっと調べてみたところ,
サンクはWOW系の16bitのアプリケーションを32bit環境で動かすためのAPIということで
今回の,自分の目的にあうものではないようです.
ATLは結構複雑なもののようですが,かなり参考になりそうなので見てみようと思います.
ザッと見た感じだと,thisをグローバルなマップに登録しておいてそこから引いてくるようなイメージでしょうか.

プログラムは殆ど初心者でして,
コンソールで動くゲーム(NetHackみたいなキャラクタベース)を作ろうとしているのですが,
それだけの事でも大変苦労してしまいます.

勉強の糸口を頂き,ありがとうございました.
643638:04/12/15 12:02:39
>>641
DWORD値とメンバ関数へのポインタのマップもスタティックに持っておいて,
ハンドラルーチンの中からそれを呼ぶということですね.
これから書いてみますが,うまく行きそうです.

皆さん,ありがとうございました.
644デフォルトの名無しさん:04/12/15 13:42:36
>>642
そういう意味のサンクではなかったのだが。
指定したthisでメンバ関数を呼ぶような関数を動的に作成するという感じ。
645デフォルトの名無しさん:04/12/15 15:15:54
やりたいこと:特定のアプリが起動中か確認したい
環境:2003Server + MetaFrame VB.NET

他社のアプリケーションがサーバ上で起動中か確認したいんですが、 MetaFrameを使って
サーバのプロセスを取得すればいいと考えました。

1.Processクラスを使用する
 →admin権限を持ったユーザしか取得が出来ない。MetaFrameを使用するユーザにAdmin権限は
   持たせられない為×

2..psapi.dllでEnumProcessesを使用する
  →VB6からの移行はOK。しかしカレントユーザのプロセスしか取得できない。
    すべてのプロセスを取得しないと確認の意味がない。

3.Kernel.dllでCreateToolhelp32Snapshotを使用する
  →VB6での確認は出来たが、.NETへの移行がうまく出来ない。
    スナップショットの取得はできるが、次のProcess32Firstで必ず0が帰ってきてエラー。

3が実現しやすいのかと思っています。
サンプルは http://vbvbvb.com/jp/gtips/1101/gCreateToolhelp32SnapshotTh32csSnapprocess.html
を利用しています。
646645:04/12/15 15:20:30
構造体は
Public Structure PROCESSENTRY32
Public dwSize As Integer
Public cntUsage As Integer
Public th32ProcessID As Integer
Public th32DefaultHeapID As Integer
Public th32ModuleID As Integer
Public cntThreads As Integer
Public th32ParentProcessID As Integer
Public pcPriClassBase As Integer
Public dwFlags As Integer
Public szExeFile() As Byte
End Structure

lngProcessSnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

ReDim udtProcessEntry32.szExeFile(259)
Dim i As Integer
For i = 0 To 259
udtProcessEntry32.szExeFile(i) = 0
Next
udtProcessEntry32.dwSize = Len(udtProcessEntry32)

If Process32First(lngProcessSnapHandle, _
udtProcessEntry32) <> 0 Then

上のProcess32Firstで必ず0が帰ってきます。
長々と申し訳ありませんが、以上で状況はわかって頂けましたでしょうか?
助言をお願いします。
647デフォルトの名無しさん:04/12/15 15:47:19
>>646
VB.NETの問題のような気がするが。マーシャリングの基本とか。

・PROCESSENTRY32のszExeFileはStringで宣言。
 MarshalAsAttribute属性をつけて、UnmanagedType.ByValTStrとSizeConst=260を指定。

・dwSizeは、Marshal.SizeOf(udtProcessEntry32)で取得した値を設定する。

C#で同様にやった分には問題なかった。
648645:04/12/15 16:43:39
647様、ありがとうございます。出来ました!!
出来たものの全く意味がわかりませんので、勉強してみます。
本当にありがとうございました。
649デフォルトの名無しさん:04/12/15 17:59:48
誰か>>640もお願いします
ネット上でかなり調べましたが分かりませんでした・・・
650デフォルトの名無しさん:04/12/15 18:08:30
DTM_SETSYSTEMTIME送れば?
651デフォルトの名無しさん:04/12/15 20:08:37
ものすごく巨大な(1000万行×10フィールド)くらいの
CSVファイルを特定のフィールドをキーにソートしろ
と言われたら、普通どんな感じでやりますか?
652デフォルトの名無しさん:04/12/15 20:13:01
>>651
俺なら数万行程度のブロックに分けてそれぞれをソートしてからマージソートだな。
653デフォルトの名無しさん:04/12/15 20:16:52
特定のフィールドと行数のペアを作ってソート。
65469式フリーPG ◆hND3Lufios :04/12/15 20:18:43
OracleかSQL鯖に食わせてSQL一発かけてCSV出力
655デフォルトの名無しさん:04/12/15 21:36:00
>653
アホ
656デフォルトの名無しさん:04/12/15 21:40:47
>>655
にんにく? いまバカの煮込みつくってます
657デフォルトの名無しさん:04/12/15 21:44:47
どーゆー意味?
658デフォルトの名無しさん:04/12/15 21:55:52
>>651
アルゴリズムを選びに行く前に、元データの傾向と対策をまず調べる
659デフォルトの名無しさん:04/12/15 21:59:27
>652
やっぱそれですかね。何かいいサンプルとか転がってないですか?
660デフォルトの名無しさん:04/12/15 22:55:34
Windowsのインデックスサービスの機能を呼び出すAPIって
ありますか?
661デフォルトの名無しさん:04/12/15 23:19:19
662デフォルトの名無しさん:04/12/15 23:26:16
>>657
そこもと蘭学の心得はおありかの
663デフォルトの名無しさん:04/12/15 23:47:35
CreateEventってどういうときに使うの?
664デフォルトの名無しさん:04/12/15 23:56:55
>>663
マルチスッドレのコードかいてて、スッドレ間の同期とるのに使う
665デフォルトの名無しさん:04/12/16 00:07:00
>>659
珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712369/250-8489478-2398654
666デフォルトの名無しさん:04/12/16 00:12:32
>665
おー、面白そうだな、これ。
667デフォルトの名無しさん:04/12/16 00:13:04
>664
どうもです。ボタンクリックとかメニュー選択とかのイベントとは
別物なんですね。
668デフォルトの名無しさん:04/12/16 00:20:58
win2000にて。
GetAdaptersInfoを呼び出し取得したIP_ADAPTER_INFOの
AdapterNameに対応したFriendlyNameを知るにはどうしたらよいのでしょうか?

XPならGetAdaptersAddressesのIP_ADAPTER_ADDRESSESで一撃なのですが、
2000だとiphlpapi.dllにGetAdaptersAddressesが入っていないので・・・

ご存知のかたがいらっしゃいましたら、教えてください。
669デフォルトの名無しさん:04/12/16 01:45:27
>>651
std::list<std::vector<std::string> > に格納して std::sort() が楽ちん。
670669:04/12/16 01:48:24
std::sort()じゃなくて、listのメンバのsort() だった。 orz
671デフォルトの名無しさん:04/12/16 03:01:42
>>670
潤沢なメモリをお持ちのようで。
#1億個のstring…
672デフォルトの名無しさん:04/12/16 07:17:14
>671
>669みたいな何も考えてない奴ってかえって
ほほえましいよなw
673デフォルトの名無しさん:04/12/16 07:27:17
しかもstd::listのソートって激遅じゃん
674デフォルトの名無しさん:04/12/16 11:40:35
VB6.0、Win2000で動かしているプログラムを
VB4.0、Win95に置き換えないといけなくなってしまいました。
VB4.0、Win95での開発は経験がなく、
APIの本やネットで調べてみたのですが
サブネットマスクとデフォルトゲートウェイとワークグループ名を取得する方法がわかりません。
ご存知の方がいらっしゃれば教えていただけませんでしょうか?
675デフォルトの名無しさん:04/12/16 12:33:17
ある端末上で動作するWinサービス(SYSTEM権限で動作)で
ワークグループ上のサーバの共有ディレクトリから端末の
ローカルディレクトリにファイルをコピーしたいんだけど、
権限の問題で躓いています。ドメインは組んでいません。

サーバのディレクトリに対してアクセス権限があるユーザのIDとパスワードは
あるのですが、端末のシステムにそのユーザを作成しないでやりたいです。
ユーザ/パスワードを暗号化してレジストリに置いて使うのはOKです。

【やってみたこと】
1.SYSTEM権限のままコピーしようとすると権限エラーで失敗します。
  →サーバ側でNULLセッションとかいうのを許可にすればOK?

2.LogonUser→Impersonateだと、サーバの共有ディレクトリに
  アクセス権限のあるローカルユーザを作らないといけない。
  ユーザを作らないとLOGON32_LOGON_NETWORKでしか成功せず、コピー不可でした。
  ※LogonUserのネットワーク版みたいなの無いんでしょうか?

以上です。

動作予定環境はNT/2K/XPです。
宜しくお願いします。
676デフォルトの名無しさん:04/12/16 12:53:37
>>671->>672
貧乏人らが必死だな
677デフォルトの名無しさん:04/12/16 13:12:29
>>674
VB4で開発しないといけない理由は?
Win95でもVB6は動いたと思うが。
#メーカー保証のないOSでの開発はできないと突っぱねるのが正解。
678674:04/12/16 13:21:17
>677
ユーザーに納入しているマシンのうち、
現在その環境で動いているマシンがありまして、
新マシン(Win2000 VB6.0)で新たに追加したプログラムと
同じものを旧マシン(WIn95 VB4.0)でも追加しないといけなくなったのです。

>#メーカー保証のないOSでの開発はできないと突っぱねるのが正解。
個人的にはそうしたいくらいです・・・。
679デフォルトの名無しさん:04/12/16 21:12:47
>>678
その場合、旧マシンのリプレイスを薦めるのが営業的にもいいかと。
つーか、VB6で開発したものをWin95で動かせばいいだけじゃないの?
#なんでVB4を使いたいのかが判らん。
680デフォルトの名無しさん:04/12/16 22:21:21
無線LANを使用するアプリを作っているのですが、
ワイアレス接続の構成をアプリ側で制御することってできないんでしょうか?
環境はWindowsXPで、かつadmin権限で動かせます。

やりたいことは
「随時SSIDを検索して、条件にあったものと接続処理」
なのです。
Windows標準のワイヤレス構成が切れるし、
メルコのクライアントマネージャみたいなのもあるからできると思うのですが、
MSDNを漁ってもいまいち見つけ切れませんでした。

日本語、英語での情報とかポインタとか知ってましたら是非教えていただけないでしょうか。
よろしくお願いします。
681デフォルトの名無しさん:04/12/16 23:05:05
>677
そういうことはお前には関係ないはずなんだが。
682デフォルトの名無しさん:04/12/16 23:05:47
エディットボックス(エディットコントロール?)に
たくさん文字列を入れたいのですがあんまりたくさんの文字列を入れると
表示されなくなってしまいます。
もっとたくさんの文字列を入れるにはどうしたらよいのでしょうか?
683デフォルトの名無しさん:04/12/16 23:12:39
>>682
98?
684デフォルトの名無しさん:04/12/16 23:13:23
>>682
エディットボックスをあきらめてリッチテキストとかにする。
685デフォルトの名無しさん:04/12/16 23:29:11
>>684
ありがとうございます。
やってみます。
686デフォルトの名無しさん:04/12/16 23:30:28
たびたびすみません。

エディットボックスに値を入れて
Enterキーを押すと値が反映されるようにしたいのですが
Enterキーが降ってきません。
どうしたら取得できるのでしょうか?
687デフォルトの名無しさん:04/12/16 23:31:15
>686
KeyPressに来ないの?
688デフォルトの名無しさん:04/12/16 23:36:50
>>687
エディットボックスにフォーカスがあるときも
普通はくるものなのでしょうか?(私の組み方がまずいのかもしれないです。)
689デフォルトの名無しさん:04/12/16 23:40:32
ちなみにメッセージはエディットボックスの
親ウィンドウで捕まえようとしています。
キルフォーカスなどのメッセージは取得できます。
690デフォルトの名無しさん:04/12/16 23:50:58
>>689
Enter キーを押すことで、IDOK のボタンが押されたという
メッセージが来ているのかも。
691デフォルトの名無しさん:04/12/16 23:53:28
>688
フォームのデフォルトボタンの方に行っちゃってるとか?
692デフォルトの名無しさん:04/12/17 00:24:20
>>676
10Mレコードで10フィールドか。
1レコード512バイトとしても、5GB。

まぁメモリが足りたとしても、CPUが追いつかないでしょ。
693デフォルトの名無しさん:04/12/17 00:28:42
>692
なんで?
694デフォルトの名無しさん:04/12/17 03:05:14
ソートのアルゴリズムのオーダーの問題

クイックソートなんて使った日にゃ、O(n^2)で死ぬよ。
1kレコードならO(n^2)でも1Mの計算量で済むが、
10Mレコードだと 100Tの計算量になっちゃうんだよ。
695デフォルトの名無しさん:04/12/17 03:23:26
クイックソートは事実上n・log(n)じゃないの?
696デフォルトの名無しさん:04/12/17 04:25:29
>>692
つまりWin「32」APIのスレである以上オンメモリのソートなんてありえない解決策ってことか
697デフォルトの名無しさん:04/12/17 07:11:32
あのー、分割してマージソートって結論はとっくに
出てるんですが・・・

メモリなんかでやるわけねーだろ。
698デフォルトの名無しさん:04/12/17 10:39:19
ちょっと質問
ホイールの入力状態を取得するAPIってやっぱり無いんでしょうか?
GetAsyncKeyStateのような使い方で簡単に取得出来ないかなと思いまして。
メッセージで取得するしか方法は無いのでしょうか?
宜しくお願いします。
699デフォルトの名無しさん:04/12/17 10:46:15
              ,,,,,,,,,,,,,,,,,,,,
             /": : : : : : : : \
           /-─-,,,_: : : : : : : : :\
          /     '''-,,,: : : : : : : :i
          /、      /: : : : : : : : i     ________
         r-、 ,,,,,,,,,,、 /: : : : : : : : : :i    /
         L_, ,   、 \: : : : : : : : :i   / メッセージで取得したら
         /●) (●>   |: :__,=-、: / <   負けかなと思ってる  
        l イ  '-     |:/ tbノノ    \    
        l ,`-=-'\     `l ι';/      \  ニート(24・男性)
        ヽトェ-ェェ-:)     -r'          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         ヾ=-'     / /  
     ____ヽ::::...   / ::::|
  / ̄ ::::::::::::::l `──''''   :::|
700デフォルトの名無しさん:04/12/17 12:01:50
マウスホイールの仕様を考えればおのずと分かるような気がするが・・・
701デフォルトの名無しさん:04/12/17 12:09:12
仕様なんてシラネーヨ
702VC++:04/12/17 14:03:12
分からないので教えていただきたいのですが・・・(^^;
VBの実行ファイルからVC++で作成したDLLの関数を実行すると例外エラーで落ちてしまいます。
落ちる箇所が決まっており、DLLから文字列をVBの実行ファイルへ送った直後に必ず発生します。
VBはフォームのロードイベントで関数をCALLしています。
【グローバル変数の宣言↓】
LPSTRg_datasendp = NULL;// VBデータ引継ぎ用バッファポインタ
【グローバルメモリ領域の確保↓】
g_hMem = GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof(SEI_INF_TBL)+256);
if (g_hMem == NULL)
{// メモリー不足
MessageBox(g_hWnd, ERR_MALLOC, MSG_BOX_CAP2, MB_OK | MB_ICONERROR);
return-1;
}
g_datasendp = (char*)g_hMem;
【VBへ渡す文字列をセットする関数↓】
FARM_API LPSTR __stdcall GetSeiData(SHORT i_type)
{
 switch(i_type)
 {
  case TYPE_SEINAME:    // 名設定
   strcpy(g_datasendp, g_sei_inf_tblp->sei_name);
   break;
        ・
}
 return g_datasendp;
}

DLLの宣言が間違っているのでしょうか?
分かる方、是非教えていただけないでしょうか?
よろしくお願いします。
703デフォルトの名無しさん:04/12/17 14:14:42
>>702
もしかしてVB側で戻り値の型がStringになっている?
704VC++:04/12/17 14:18:05
>>703
はい。返却値はString宣言しています。
Public Declare Function GetSeiData Lib "Farm.dll" ( _
ByVal i_type As Integer) As String ' 生産者情報取得処理
705VC++:04/12/17 14:26:37
VBのデバッカでは動作してしまうのです・・・。
(DLL・EXE共最新です)
70669式フリーPG ◆hND3Lufios :04/12/17 14:41:15
BSTR
707デフォルトの名無しさん:04/12/17 14:42:30
>>704
確かこうすればいいはず。g_datasendpは要らなくなる。
FARM_API BSTR __stdcall GetSeiData(SHORT i_type)
{
  char *p;
  switch(i_type)
  {
  case TYPE_SEINAME:    // 名設定
    p = g_sei_inf_tblp->sei_name;
   ・
  }
  return SysAllocStringByteLen(p, strlen(p));
}
70869式フリーPG ◆hND3Lufios :04/12/17 14:48:33
VBの文字列は長さ(32bit)と文字列の格納されたUnicodeの配列で、
BSTRはunicode配列のアドレス。

VBのデバッガで動作するのは、デバッガが終端のNULLを見ているか、
たまたまと思われ。
709VC++:04/12/17 14:50:13
>>707
回答ありがとうございます!!
早速試してみます!!

どうもでした。
結果はまた書き込みます。
710デフォルトの名無しさん:04/12/17 15:16:34
>>708
VBの文字列 == BSTR
文字列の長さを持っているのがBSTRの条件だよ。
711VC++:04/12/17 15:17:52
>>707-708
本当にありがとうございました!!
動きました!!
助かりました!!

これで作業を進める事が出来ます。
若輩者ではありますが、今後もよろしくお願いします。
712デフォルトの名無しさん:04/12/17 15:18:34
>>710
うん。わかってる。んなもんで、>>706を書いた。
(そんときは時間がなかったので、一言だけ書いたけど)
713デフォルトの名無しさん:04/12/17 15:21:15
BSTRなのにstrlenでいいのけ?
714デフォルトの名無しさん:04/12/17 15:22:42
715デフォルトの名無しさん:04/12/17 15:42:39
return A2BSTR(p);
でもよかったとおもうべな。
716デフォルトの名無しさん:04/12/17 16:41:49
>>713
VBはDLL関数に文字列を渡したり返したりするときに勝手にShift JISとUnicode間の変換をしてくれるから平気。
717デフォルトの名無しさん:04/12/17 16:53:52
>>713
だめだよね。
全角文字ばかりだからたまたま動いている、と想像する。
718デフォルトの名無しさん:04/12/17 16:58:37
(^( さすがVB )^)
719デフォルトの名無しさん:04/12/17 18:24:20
すみませんDLLにバージョン情報付けたいのですが
DLLリソースつかえませんよね?
どうすれば・・・
おねがいします
720デフォルトの名無しさん:04/12/17 18:25:23
>>719
普通にリソースつけられるが‥‥
721719:04/12/17 18:30:22
ごめん・ほうとうにごめん
ちょっと子一時間説教されてきます
なぜかリソース使えないつもりでした
722デフォルトの名無しさん:04/12/17 18:35:50
APIの質問じゃないと思うんですけど
コモンダイアログのGetOpenFileNameを呼び出すと
画面の左上にウインドウが表示されてしまいます・・
これを画面中央に表示させたいのですが
OPENFILENAMEに何か値を入れると直るのでしょうか?

環境はVC7でMFCは使ってません


723デフォルトの名無しさん:04/12/17 18:52:17
hwndOwnerにハンドルをセットするとそのウィンドウの左上あたりに表示されるみたい
724722:04/12/17 19:05:45
>>723
できました!
ありがとう、感謝
725デフォルトの名無しさん:04/12/17 20:44:47
エディットコントロールのフォントを変えたのですが、カーソルの大きさがそのままで変わりません。
デフォルトの文字サイズより小さくしたのですが、エディットコントロールの高さも変わりません。
高さが変わらないのはカーソルのせいではないかと思うんですけど・・・。
解決方法をお願いします。

エディットコントロールのフォント変更は、WM_CTLCOLOREDITが来たときに
wParamからhdcを取得して、あらかじめ用意しておいてフォントをSelectObjectで選択しています。
726デフォルトの名無しさん:04/12/17 20:56:09
サブクラス化してみたらどう?
727725:04/12/17 21:04:05
>>726
ありがとうございます。
やってみます。
728デフォルトの名無しさん:04/12/17 21:04:08
WM_SETFONT
729725:04/12/17 21:04:59
>>728
おっと、
ありがとうございます。
調べてみます。
730725:04/12/17 21:12:26
WM_SETFONTでできました。
ありがとうございました。
731デフォルトの名無しさん:04/12/18 12:48:51
リストボックスの選択されている項目の文字列を取得するにはどうしたらいいのでしょうか?
732デフォルトの名無しさん:04/12/18 12:59:00
MSDN眺めれば5分とかからずわかりそうな事を・・・
733デフォルトの名無しさん:04/12/18 13:04:09
>>732
知らないのなら黙ってて下さい。
734デフォルトの名無しさん:04/12/18 13:10:16
OSだけ再起動したいのですが、どうしたらよいでしょうか
(昔のOSでSHIFT押しながら再起動をしたときのように)?
735731:04/12/18 13:23:10
>>732
MSDNは異常に重いうえに分かりにくいのですが・・・。
一応見てみます。
736731:04/12/18 13:32:02
すいません、やっぱりMSDNではちょっと無理があります。
どこを調べていいのか分からない上に、検索文字列に日本語を使えないのは厳しいです。
もうちょっとまともなサイトを紹介していただけませんでしょうか?
737デフォルトの名無しさん:04/12/18 13:35:01
738デフォルトの名無しさん:04/12/18 13:41:24
>>737
リストビュー

>>736
LB_GETCURSEL
LB_GETTEXT
ググれ
739731:04/12/18 13:57:26
>>737
リストボックスです。

>>738
ありがとうございます!
LB_GETTEXTでできました!
740デフォルトの名無しさん:04/12/18 16:07:15
リッチエディットに画像を表示する方法はありますか?
Wordのように、改行されると画像も下に移動するようにしたいのです。
Borland C++ Compilerを使用しています。
741デフォルトの名無しさん:04/12/18 19:49:26
MFCとSDKって出来る事が違うのですか?
今はSDKしか勉強していないのですが、MFCも扱えた方がいいですか?
742デフォルトの名無しさん:04/12/18 19:52:34
>>741
SDKが扱えるならMFCなど要らん
743デフォルトの名無しさん:04/12/18 21:14:33
>>742
それはちょっと違うと思う
744742:04/12/18 21:25:55
>>743
そうなのか?
俺はそういうのをどこかのサイトで読んでから、それを信じてたがw
745デフォルトの名無しさん:04/12/18 21:36:05
適材適所
MFCや他のライブラリを使えば短時間で簡単に仕上げられる仕事を
SDKレベルで車輪の再開発している同じフロアのやつを見ると腹が立つ。
もちろんMFCが想定しないようなアプリケーションスタイルとか、細かい
ケアが必要なものはSDKレベルでやったほうが良い場合も多い。

746デフォルトの名無しさん:04/12/18 21:40:05
>>742
CRectTrackerなんぞ自分で作るのか?
747デフォルトの名無しさん:04/12/18 21:40:51
細かいケアが必要なものも最近じゃATL/WTLで作ってるな、俺は。
一度楽するとSDKで作る気起きん。
748デフォルトの名無しさん:04/12/18 21:48:10
ライブラリの限界にぶちあたるとそれを回避する方法を考えたり
最悪パッチ作ったりと大変だけど、基本的には圧倒的にライブラリ
使ったほうが生産的だよな
749デフォルトの名無しさん:04/12/18 22:00:27
他人のソース見たりしないんだろうか?
MFCも知らないと損だろ
750デフォルトの名無しさん:04/12/18 22:09:23
>>749
MFCは使ったことないけどMSDN見れば(特にAPIのラッパ部分は)大体理解できるから問題ない。
751デフォルトの名無しさん:04/12/18 22:23:18
MFCを知らずにソースだけ追いかけても理解できないはずだけど
752デフォルトの名無しさん:04/12/19 00:00:13
VC++についてるウィザードが使える、というだけでもMFCを使う価値はあると思う。

ただ、MFCが優れているかというと、うーん・・・
VBのC++版っていう感じがして、なんかダサいな。

Win32直叩きでも作ったことあるけど面倒だったのでMFC使ってます。
753デフォルトの名無しさん:04/12/19 00:47:45
VCTK+WTLがなんか好きだな。タダだし
754デフォルトの名無しさん:04/12/19 00:56:03
>>753
WTLってATL必須じゃないの?
んでATLは有料と。
755デフォルトの名無しさん:04/12/19 00:59:00
最近までそう思ってたけどこの書き込み見て試したら見事うまくいってうはwwwwwwwっをkwwwっうぇwww状態

http://pc5.2ch.net/test/read.cgi/tech/1086287039/914
756デフォルトの名無しさん:04/12/19 01:00:44
英語が苦手な人は、bccが良いかと。
コンパイラとしての性能は比較にならんほどvctkだけど。
757デフォルトの名無しさん:04/12/19 01:58:39
VCって1万円くらいでしょ?
なんでVCtoolkitに手を出すの?
758デフォルトの名無しさん:04/12/19 02:07:22
学生はいいよな
759デフォルトの名無しさん:04/12/19 02:56:05
MSはボリすぎ
760デフォルトの名無しさん:04/12/19 03:15:32
コンパイラで数万円ならそんなもんじゃね?
bccとかみたいに放置状態ならフリーでもいいかも。
761デフォルトの名無しさん:04/12/19 03:35:51
MFCは基本的にはなんにもしてくれないだろ。
アレ使って、なんか楽になるのか?
762デフォルトの名無しさん:04/12/19 03:36:38
使いづらいSDKのラッパーという印象しかない。
763デフォルトの名無しさん:04/12/19 06:20:13
>762
君はそれでいいんじゃないの?
764デフォルトの名無しさん:04/12/19 06:23:46
>>762
まあ、実際そうだしなw
765デフォルトの名無しさん:04/12/19 07:37:30
APIをフックすることは可能ですか?
なにかのAPIをコールしたときに自分の関数を呼ばせ、
そこで処理をしてから本物にバトンタッチするようなことを考えてるんですが。
766デフォルトの名無しさん:04/12/19 07:58:00
>>758
ごめん。
VS.NET 2002が出て、VC6が安売りされてる時の値段だった。
767デフォルトの名無しさん:04/12/19 08:20:23
>765
できる。
768デフォルトの名無しさん:04/12/19 08:25:01
>764
あなたの経験年数は?ちなみにわたしは1年。
769デフォルトの名無しさん:04/12/19 08:39:48
>665
面白い本を紹介してくださってありがとうございます。
さっそく注文して届いた本をぱらぱらめくって見ているのですが、
年末年始はこの本にどっぷりつかりそうです。
770デフォルトの名無しさん:04/12/19 10:59:26
>>768
Win32APIなら7年
MFCなら5年
771デフォルトの名無しさん:04/12/19 15:31:53
>>770
(`Д´ )9m経歴詐称で訴えてやる!!
772デフォルトの名無しさん:04/12/19 15:53:05
俺なんか
Win32API:1年
MFC:2年
まだまだだな・・
773デフォルトの名無しさん:04/12/19 16:11:31
>>772
経験年数なんて自慢するもんじゃない。
どんなに年月かけたって進歩の無い奴は無いまま。
3年もたって使いこなせないのはもう駄目だと思う。
774デフォルトの名無しさん:04/12/19 16:39:25
一年あれば充分だろ。
775デフォルトの名無しさん:04/12/19 17:00:59
半年あれば十分だろ
776デフォルトの名無しさん:04/12/19 17:10:03
一久遠あれば十分だろ。
777デフォルトの名無しさん:04/12/19 17:13:38
(・∀・)ニヤニヤ
778デフォルトの名無しさん:04/12/19 17:46:49
エディットコントロールにスクロールバーが付いている時、
WM_MOUSEWHEEL を、そのスクロールバーに感知させないようにするには
どうしたらいいのでしょうか?

プロシージャのサブクラス化をしているつもりなのですが、
まず最初にスクロールバーが感知して、それから、
サブクラス化したプロシージャに来ているようなのです…

WM_MOUSEWHEEL を、自分だけでイベントハンドリングしたいのです
スクロールバーがあっても、感知させたくないのです
779デフォルトの名無しさん:04/12/19 17:47:19
>>774
1年じゃ無理では無いにしろ難しいと思うな。
結構くる注文で
「flashやVCみたいなのにしてくれ(ドッキングツールバーのことだな)」とか
「IEのお気に入りと同じような機能を入れてくれ」
ってのがあるけどあーゆーのはホイホイ作れるまでなるのは時間かかるだろ。
まあ、Win32APIだけの話ではね。
780デフォルトの名無しさん:04/12/19 18:05:38
ライブラリ使えば数分でできる仕事を
Win32APIだけで時間をかけて作る意味があるのか?
しかも一年以上の修行期間が必要だなんて・・・
781デフォルトの名無しさん:04/12/19 18:10:39
技術屋の自慰行為
782デフォルトの名無しさん:04/12/19 18:16:42
C++知らなきゃしょうがない。
手も足もだせないだろう。
783デフォルトの名無しさん:04/12/19 18:23:03
>>780
そういうライブラリの存在を知る時間も含めて
一年でできるようになるのかと。
784デフォルトの名無しさん:04/12/19 18:59:49
誰か>>765に答えてやれよ
785デフォルトの名無しさん:04/12/19 19:13:18
78669式フリーPG ◆hND3Lufios :04/12/19 19:32:51
モノによるのでは。
数を売るパッケージで、頻繁に使うようなものならSDKで作りこむのもよい。。
短納期で開発効率重視ならライブラリに頼って少しでも工数が稼げれば。
787デフォルトの名無しさん:04/12/19 21:07:35
短納期で開発効率重視であることの方が多いよなぁ・・・
788デフォルトの名無しさん:04/12/19 22:21:23
誰か>>740に答えてやれよ
789デフォルトの名無しさん:04/12/19 22:24:17
>>788
お前が答えろ
790デフォルトの名無しさん:04/12/19 22:28:53
ahoか?
分かってたら答えてるわ
791デフォルトの名無しさん:04/12/19 22:40:57
Delスレで質問したら、こちらにとレスがあったので、質問させてください。
ドライブ名(Cとか)からハードウェア名を取得するには、どのように
したらよいのでしょうか?
ドライブを右クリックして、プロパティを開き、ハードウェアタブに
表示されるハードウェア名を取得したいのですが。
792デフォルトの名無しさん:04/12/19 22:56:09
>>740 == >>788 == >>790
793デフォルトの名無しさん:04/12/19 23:24:44
>792
仮にそうだとして何か問題でも?
794デフォルトの名無しさん:04/12/19 23:27:51
== >>793
795デフォルトの名無しさん:04/12/19 23:33:35
>>792
">>740" == ">>788" && ">>788" == ">>790"
初歩的なミスはやめろな
796デフォルトの名無しさん:04/12/19 23:48:18
もしかして、C++ が使えるんだと言う自慢なの ? (藁
797デフォルトの名無しさん:04/12/19 23:51:54
どれが?
798デフォルトの名無しさん:04/12/20 00:30:51
エディットコントロールを作成した時点でキャレットを表示したいのですがどうすればいいか教えてください。
キャレット作成して表示してもそのキャレットは移動できません。
なのでエディットコントロールをマウスでクリックしたときに初めて表示されるキャレットを最初から表示したいのです。お願いします
799デフォルトの名無しさん:04/12/20 00:35:33
>>798
SetFocusか何か。
800798:04/12/20 00:43:42
>>799
ありがとうございますありがとうございますありがとうございます

801デフォルトの名無しさん:04/12/20 04:10:41
下のようなプログラムを書いたのですがウインドウが、一番手前に来ません。
SetForegroundWindow( hWnd )ではうまくいったのですが・・・、
どうしてだか気になるので教えてください。

if( GetForegroundWindow() != hWnd ){
SetWindowPos( hWnd , HWND_TOP , 0 , 0 , 0 , 0 , SWP_NOSIZE | SWP_NOMOVE );
}
802デフォルトの名無しさん:04/12/20 05:35:34
>>791
ハードウェアタブに表示されるのは全ドライブの一覧で、
ドライブレターとの関連はないよ。たまたま一番上に表示されてフォーカスが合ってるだけだったりする。

ドライブのメーカーや型番を取得するのは、
"\\\\.\\c:"をCreateFileで開いて、
DeviceIoControl()でIOCTL_STORAGE_QUERY_PROPERTYでSTORAGE_DEVICE_DESCRIPTORを取得すればいけそうな希ガス。
サンプルやヘッダはDDKにあります。
803802:04/12/20 05:50:54
ごめん、ヘッダはDDKにあるけど、参考になるサンプルはないみたい。

たまたま自分がやろうとしていたことに近いものだけ、サンプルがあったので、他のもあると思い込んでました。
804802:04/12/20 07:17:30
たとえば、こんな感じ。
元々SCSI用なので、ATAの場合はベンダ名がプロダクト名に入ってきます。
・・・だけど、ダイナミックディスクでは取得できない・・・もっと適切なAPIがあるのだと思います。

#include <devioctl.h>
#include <ntdddisk.h>

HANDLE hFileHandle = CreateFile("\\\\.\\c:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL) ;
if (INVALID_HANDLE_VALUE != hFileHandle) {
UCHAR buffer[2048] ;
ULONG returned = 0 ;

STORAGE_PROPERTY_QUERY spq ;
spq.PropertyId = StorageDeviceProperty ;
spq.QueryType= PropertyStandardQuery ;

BOOL status = DeviceIoControl(hFileHandle, IOCTL_STORAGE_QUERY_PROPERTY, &spq, sizeof(spq), buffer, sizeof(buffer), &returned, 0) ;
if (status) {
STORAGE_DEVICE_DESCRIPTOR* pSDD = (STORAGE_DEVICE_DESCRIPTOR*)buffer;
char* psz0 = pSDD->VendorIdOffset? &((char*)pSDD)[pSDD->VendorIdOffset] : NULL ;
char* psz1 = pSDD->ProductIdOffset ? &((char*)pSDD)[pSDD->ProductIdOffset] : NULL ;
char* psz2 = pSDD->ProductRevisionOffset ? &((char*)pSDD)[pSDD->ProductRevisionOffset] : NULL ;
char* psz3 = pSDD->SerialNumberOffset ? &((char*)pSDD)[pSDD->SerialNumberOffset] : NULL ;
}
}
805デフォルトの名無しさん:04/12/20 07:37:19
806デフォルトの名無しさん:04/12/20 13:52:18
>>750
LoadImage でLR_LOADMAP3DCOLORSを指定しても正しく色変換がなされないケースへの
workaround とか、MFCにもいろいろ役にたつコードが含まれてるわけで、一通りソース読んで
おくくらいのことはした方がいいと思うけど・・・
807デフォルトの名無しさん:04/12/20 16:10:56
スレをまとめてFAQ作るような勤勉な輩はいないものか。
808デフォルトの名無しさん:04/12/20 17:35:27
>>807
おまいがいるじゃないか。
809デフォルトの名無しさん:04/12/20 17:53:20
マウスカーソルが自分のウインドウ上から出た瞬間は
どうやって検出すればいいですか
810デフォルトの名無しさん:04/12/20 18:03:44
キャプチャして移動するたびに座標比較する
811デフォルトの名無しさん:04/12/20 18:11:40
>>809
WM_NCHITTEST使えばできる
812デフォルトの名無しさん:04/12/20 19:21:35
TCP/IPのIPアドレスなどのネットワーク設定(LAN設定)の切り替え(切り換え)
をワンタッチで簡単にできるTCP/IP設定変更ツールを作りたいのですが
どんなAPIを使えばよろしいでしょうか?
環境はWindows2000,XPを考えています
81369式フリーPG ◆hND3Lufios :04/12/20 19:29:50
814812:04/12/20 19:38:14
>813
リンクありがとうございます。
815デフォルトの名無しさん:04/12/20 20:07:37
音楽を再生するMMControlについて質問です。
MIDIデータを再生し、一時停止(Pause)した後、再びその位置から再生すると、何故か音色が変わってしまいます。
使った事のある方なら殆どの方がきっと「あれ?」と思うところだと思います。

どうもMMControlでは、頭から再生しようとした場合しか音色設定を読み込んでない気がするのですが、
何か解決方法は無いでしょうか。
816815:04/12/20 20:08:28
すいません、MMControl、つまりマルチメディアMCIコントロールでのMIDI再生の事です。
817デフォルトの名無しさん:04/12/20 20:16:43
ネットワークドライブの共有元フォルダ名から共有名を知る方法はありませんか?
コンピュータ名:SERVER
共有フォルダ:E:\Data
だと共有元フォルダ名は"Server:e:\Data"になりますよね?
それを別なコンピュータ上でXドライブとして設定してたとすると、
"Server:e:\Data\Tmp"を"X:\Tmp"にへんかんしたいのですが。

環境:windows2000

よろしくお願いします。
818デフォルトの名無しさん:04/12/20 20:52:49
WNetGetConnectionで一致する物を探す
819デフォルトの名無しさん:04/12/20 22:34:56
>>815
俺も同じ問題で悩んでるが、解決できてないorz

ぐぐったら出てきた。やっぱり解決できてない
http://www.takeittechies.com/vbtomo/boards/vbqanda.php?do=spread&num=2303
820デフォルトの名無しさん:04/12/20 23:18:51
>770
7年もコーディングやってるなんて化石みたいな奴だな。
一生次のステップに進めなそう。
821817:04/12/20 23:25:31
>>818さんありがとうございます。
試してみたのですが、
期待する文字列"Server:e:\Data\Tmp"にたいして
"Server:\Data\Tmp"しか取得できませんでした。
参照先の完全なローカルパスが取得したいのですが無理でしょうか?
822デフォルトの名無しさん:04/12/20 23:27:36
>>821
参照先のドライブ名は得られないと思うけど。
823812:04/12/20 23:31:08
AddIpaddressで仮想的にIPを追加できることはわかりました
できればローカルエリア接続のプロパティで設定したのと同じ設定
(再起動しても設定が消えない)方法でやりたいのですが
調べたところネットワークドライバ(NDIS?)でプログラムすることに
なるのでしょうか?
と、いってもデバイスドライバのプログラムなんて想像がつかない状態です

824デフォルトの名無しさん:04/12/20 23:46:57
>>820
管理職やりたいんならやれば?
825デフォルトの名無しさん:04/12/21 00:17:03
何この過ぎ去ったレスほじくりかえしてるスレ
826デフォルトの名無しさん:04/12/21 01:08:01
>>820
専門学校で3年、会社で4年だけど?
まともなWindowsのアプリ組める奴ってめずらしいだろ?
827デフォルトの名無しさん:04/12/21 01:55:08
>>826
掃いて捨てるほどいるけど?
828デフォルトの名無しさん:04/12/21 01:56:48
>>826
え?・・・。
829デフォルトの名無しさん:04/12/21 02:23:06
絵に描いたような胃の中の蛙でちゅね。
830デフォルトの名無しさん:04/12/21 02:26:27
VC++ Version2003ってClassWizardってないのか?

VC++6だと、メニュー→表示→ClassWizardってな感じでいけたけども。
831デフォルトの名無しさん:04/12/21 02:40:40
>>826
自分がまともなものを組めないからって、そんなことを言っちゃいけないよ。
832デフォルトの名無しさん:04/12/21 03:32:51
まとも、というのがどの程度のレベルかだね。

一見まともそうでも、画面のデザインやDPIを変更すると破綻するアプリは多いよ。
833デフォルトの名無しさん:04/12/21 05:33:24
うえみてくらすなしたみてくらせ
834デフォルトの名無しさん:04/12/21 06:21:03
>>832
作ってる本人と環境が違うと問題がでるのはどうしようもないだろ
本当におかしければユーザーから指摘されて直すだろうし
もしかして色盲とか弱視とかで非常に特殊な設定してる人ですか?
835デフォルトの名無しさん:04/12/21 06:41:43
>>830
スレ違い。
836デフォルトの名無しさん:04/12/21 07:09:35
>824
あわれよのう
837デフォルトの名無しさん:04/12/21 07:32:17
>>834
どうしょもなくないよ。まともに作ってれば問題は起きない。
たまたま自分の環境でうまく動いてるだけというのは、まともとは言わない。

決め打ちでC:\WINNT\SYSTEM32にインストールしたり、
一時ファイルのために C:\ランダムな数字 なフォルダを作ったりするアプリを、まともと言いますか?
838デフォルトの名無しさん:04/12/21 09:10:25
>>832
> DPIを変更すると破綻
それってディスプレイドライバの問題じゃん。
839デフォルトの名無しさん:04/12/21 11:50:43
まあ、なんでもいいけど。
数年来Win32の経験つんできているってことは需要がありつづけるってことでしょ。
ええなあ。
840デフォルトの名無しさん:04/12/21 12:08:18
Windowsのファイルシステムにファイル(やディレクトリ) を一意に識別する固有の
識別子のようなものはないですか?
あればそれを取得や検索するAPIも教えていただけませんか?

841デフォルトの名無しさん:04/12/21 12:11:29
>>840
パス名とファイル名を繋げると一意な識別子になります!
842デフォルトの名無しさん:04/12/21 12:24:03
Σ(゚Д゚;)ハッ
843840:04/12/21 12:35:55
>>841
一度作成されたら削除されるまでリネームしようが移動しようが変わらないものは
ないのですか?
844デフォルトの名無しさん:04/12/21 12:38:44
無いよ
845デフォルトの名無しさん:04/12/21 12:40:24
Σ(゚Д゚;)ハッ
846デフォルトの名無しさん:04/12/21 12:40:54
実行した瞬間MS-DOSを起動させるには、どのようにすればいいですか?
847デフォルトの名無しさん:04/12/21 12:44:59
>>846
脳味噌を洗って出直してください
848デフォルトの名無しさん:04/12/21 12:49:03
洗ってきました。さぁ、教えてください。
849デフォルトの名無しさん:04/12/21 12:51:10
NT系だとMS-DOSは入ってないよな
850デフォルトの名無しさん:04/12/21 12:56:31
Σ(゚Д゚;)ハッ
851デフォルトの名無しさん:04/12/21 13:00:51
>>843
msvcrt の struct stat の st_dev と st_ino はどういう意味の値なんだろうね?
UNIX だとこの2つの値のペアを(パス名非依存の)識別子と考えられるんだけど。
852デフォルトの名無しさん:04/12/21 13:17:19
LoadLibrayExで
LOAD_LIBRARY_AS_DATAFILEを指定してDLLを読み込んだとき
その読み込んだDLLをそのまま別のファイルに書き出すにはどうすればよいのでしょうか。
853デフォルトの名無しさん:04/12/21 13:55:11
>>852
LoadLibrayExで指定したファイル名を使ってCopyFile
854840:04/12/21 15:10:39
>>851
ありがとうございます、さっそく調べてみたのですがMSDNライブラリには
>st_ino は、FAT、HPFS、または NTFS の各ファイル システムでは意味を持ちません。
との記述が…
残念です。もう少し調べてみたいと思います。
855デフォルトの名無しさん:04/12/21 15:22:21
>>854
ありゃ、残念。

で、Cygwin で st_ino がどうなっているか調べてみると、
GetFileInformationByHandle() を使っていて、この API で得られる
nFileIndexHigh と nFileIndexLow がそれっぽいような違うような値ら
しい。

856デフォルトの名無しさん:04/12/21 15:36:30
| Note that this value is useful only while the file is open by at least one process.
| If no processes have it open, the index may change the next time the file is opened.

違うよなあ、こりゃ。

857840:04/12/21 17:49:26
OS上ではどのように処理しているのですかね?
まさか、リネームや移動しているたびに変更情報は作りませんよね?
フォルダの移動なんかやったらえらいことになりそう…
ファイルシステムに詳しい方はいませんか?
スレ違いですかね?
858デフォルトの名無しさん:04/12/21 19:02:42
>>840
だから無いからOSは何も処理してないよ。
859デフォルトの名無しさん:04/12/21 19:20:50
>>838
そういう話ではない。

画面レイアウトがピクセル単位で決められているのにフォントだけポイ
ント単位で作成してたり、メニューのフォントが大きくなってメニュー
バーが2段表示になるとクライアント領域が狭くなって一部の操作がで
きなくなる、とかのアプリケーション。
860デフォルトの名無しさん:04/12/21 20:29:05
MD5
861デフォルトの名無しさん:04/12/21 21:30:17
オブジェクト識別子ってのがなかったっけ?
Distributed Link Tracking Serverが使ってる奴
862デフォルトの名無しさん:04/12/21 22:20:15
>>840
GetFileInformationByHandle

ただし、誰かが握ってないとダメ。
863デフォルトの名無しさん:04/12/21 22:21:25
>>791
解決した?
864デフォルトの名無しさん:04/12/21 23:46:44
>850,843
ない

>857
>リネームや移動しているたびに変更情報は作りませんよね?
>フォルダの移動なんかやったらえらいことになりそう…
なにが大変なのかわからんけど
FATの場合、リネームや移動ではFATエントリーは変化しない(当然データの移動も発生しない)
単にディレクトリエントリの中身が書き換えられるだけだからそれほど大変じゃない
ただ、ディレクトリエントリのどこに書き込まれるかは移動するたびに変わる
コピーすると実際にデータが入るクラスタが変わるのでFATエントリーも変化
865デフォルトの名無しさん:04/12/22 01:09:08
プログラムでマウスの自動処理をしたいのですが、SendMessageで
特定のハンドルに送るのではなく、画面のx,yをクリックした事にする事は
出来ますでしょうか?

全ての窓を取得してx,yの位置の最前面にあるハンドルに送ったりするの
ではなく、マウス操作をそのまま再現する様な・・・
866デフォルトの名無しさん:04/12/22 01:16:42
>>865
使ったこと無いけどmouse_event
ところでなんでこのAPIは小文字なんだろうな
867デフォルトの名無しさん:04/12/22 01:41:26
>>866
クスコ

絶対座標の仕様が回りくどい・・・
868840:04/12/22 09:00:06
>>864
そうですか、説明ありがとうございます。元々やりたかったことが特定フォルダをReadDirectoryChangesw
で監視して、ファイルの情報をデータベース二キロ浮くしたかったのです。
そこでファイル固有の情報を主キーにしようかなと思っていたもので。
実際に作ってみたのですが(とりあえずフルパスを主キーにした)、このAPIって結構ターゲットの変更を追
尾しきれないのですね。私の作り方が悪いのでしょうが。
メインスレッドから監視スレッドを立ち上げ、変更がある都度書き込みスレッドを作成してデータベースに
アクセスしています。ファイルの追加やリネームニューでデータを追加し、削除やリネームオールドでデー
タを削除しているのですが、瞬間的に作られるテンプファイルなどが新規ファイルとして残ったり、多くの
ファイルを同時に操作すると削除したファイルなどがデータベースに残ってしまいます。
基本的なアプローチが間違っているかともおもいますが。このよう場合の常套手段など在るのでしょうか?
他スレ誘導や参考サイトなど教えていただけると助かります。
869デフォルトの名無しさん:04/12/22 09:49:58
>変更がある都度書き込みスレッドを作成して
変更が立て続けに起きたときに処理が並行して正常に記録できなくなってる悪寒。
870791:04/12/22 09:54:46
>>863
レスしなくてすみません。まだ未解決です。
APIには慣れていないもので、色々と調べています。
今回、ハードウェア名(?)を調べたいのは、USB接続された
リムーバブルディスクですが、質問ばかりだとアレなので、
まず>>804の内容を理解しようと頑張ってみます。

参考になるサイトがありましたら教えて頂けると助かります。
871デフォルトの名無しさん:04/12/22 13:05:57
>>865
vncサーバのソースとか読んでみたらどうでしょう。
vncプロトコルは異様にシンプルなので、特に問題なければサーバを
そのまま使うのも簡便でしょう。
872デフォルトの名無しさん:04/12/22 13:23:14
名前見てるだけでチンチン立ってくるよ。
873デフォルトの名無しさん:04/12/22 16:44:40
システム警告音を鳴らしたまま MessageBox を表示して
それを閉じるまで Beep 鳴りっ放し、ってのは出来ないでしょうか?
(サウンドカードは使えないとして)
874デフォルトの名無しさん:04/12/22 16:46:38
別スレッドで鳴らしまくれ!!!
でもそれ激しくウザいな
875デフォルトの名無しさん:04/12/22 17:19:08
でもそういう要求は多い罠。
でも納品してからやっぱり五月蝿いと言われる罠。
876デフォルトの名無しさん:04/12/22 17:26:34
んで、ボリュームを下げるよう言われるのな。
877873:04/12/22 17:42:49
やはり別スレッドになりますか…
取り敢えず別スレッドの無限ループ内で
Beep() を呼ぶ、というやり方で試してみました。
…継続時間として指定した時間が経過するまでは
TerminateThread でもすぐに止まらないっすね。
継続時間1秒として、「音が止まるまで少し遅れる事がある」
というところで納得してもらうことにします。
ありがとうございました。
878デフォルトの名無しさん:04/12/22 19:10:55
すいません
InvalidateRectで全画面描画すると
凄いチカチカするんですが
どうにかできないでしょうか?
以前使ってた言語ではこの程度でチカチカはしなかったんですが
879デフォルトの名無しさん:04/12/22 19:19:08
そうですか
880デフォルトの名無しさん:04/12/22 19:19:19
>>878
以前と今の言語は何だ?
881デフォルトの名無しさん:04/12/22 19:25:03
WM_ERASEBKGNDを適切に処理する。
882878:04/12/22 19:58:59
やはりもう少し勉強してから質問する事にします
失礼しました
883802:04/12/22 20:40:12
>>870
USBのHDDでも大丈夫でしたよ。
HDDがUSBかどうかは、STORAGE_DEVICE_DESCRIPTORのBusTypeでわかります。

"\\\\.\\c:" というのはCドライブの場合で、Dドライブなら "\\\\.\\d:" です。
あと、C言語では\を直接書くことができないので、\を\\で書いています。
つまり、CreateFileに渡すのは実際には、"\\.\c:"です。

\ではまってたら、ごめんなさいね・・・。
884デフォルトの名無しさん:04/12/22 22:40:46
Win2000より古いWindowsで、HWND_MESSAGEを使ったメッセージ専用ウィンドウと
同等の機能を実現することって可能ですか?
885デフォルトの名無しさん:04/12/22 22:50:20
識別できるようなクラス名もウィンドウ名も持たないダイアログがあるのですが
こういったダイアログのハンドルをFindWindowで取得するにはどうすればいいのでしょうか?
886デフォルトの名無しさん:04/12/22 23:24:14
何が異なるのかをとりあえず書け
887デフォルトの名無しさん:04/12/23 01:03:56
c++スレでスレ違いといわれたのでこちらであっているのか分かりませんが。。

VC++.net
キーボードとマウスからの入力はWM_KEYDOWNなどを受け取るので分かりますが、
ゲームのコントローラーからの情報はどうやれば分かるのでしょうか。
spy++でやってもコントローラーからの情報は一切受け付けません(出力を全て選択していますが該当するものは元々なさそう)。
コントロールパネルのゲームコントローラーは正常に受け付けています。
ゲームのコントローラーは[PS2のコントローラー]-[コンバーター(USB接続)]-[PC]と繋いでいます。
888デフォルトの名無しさん:04/12/23 01:16:33
889887:04/12/23 01:19:59
>>888
ありがとうございます。
890デフォルトの名無しさん:04/12/23 08:16:11
>>887
タイマーか何かでチェック汁
891デフォルトの名無しさん:04/12/23 10:08:18
大きなファイル(数GB)の真ん中に、数Byteのデータを挿入したいんです。

真ん中にシークして、書き込む領域のデータをバッファに待避して、
書き込みたいデータを書き込み、次々とずらして最後まで繰り返していく、
という方法でできるにはできますが、
ファイルが大きいので入出力処理に時間がかかってしまいます。

できるだけディスクへの入出力が少なくなるようにするには、
どうするのがいいのでしょうか?

892デフォルトの名無しさん:04/12/23 10:28:46
>>891
どうしようもない。データ構造を工夫するとか。
 たとえばビデオデータの例だとQuickTime なんかは、実際のファイル内での順序と
再生される時系列とが一致しなくても良いデータ構造を使って、編集時はファイルを
大きく変更しなくても挿入やカットができるようにしている。必要なら最後に整列する。
893デフォルトの名無しさん:04/12/23 10:45:27
>>891
データベースを利用できないか?
894デフォルトの名無しさん:04/12/23 12:47:43
>>892,893
すでに作られているファイルを加工したいので、
自分でデータ構造を定義できないし、データベースも使えないんです。

メモリマップトファイルを使って…、とも考えたんですが、
結局、書き込みが発生してしまうんですよね。


895デフォルトの名無しさん:04/12/23 14:06:44
ファイルシステムを直接いじるってのはどうだ?
断片化するだろうけど‥‥
896デフォルトの名無しさん:04/12/23 14:17:12
>>887
RegisterRawInputDevicesを呼び出すとWM_INPUTを受け取れるようになる。
普通はDirectInputだろうけど。
897887:04/12/23 15:07:51
>>896
レスありがとうございます。

DirectInputを検索して出てきたサイト(ToruのDirectX〜)のジョイスティック状態のサンプルを実行してみました(PS2のコントローラー)。
ttp://www.geocities.jp/toru_website/di/4.html
左側のスティックを傾けない場合、十字キーの[左か右]と[上か下]を常時押した状態になります。
また倒した方向に対した十字キーの押下は正しいのですが、傾けた角度は関係なく言わば押したか押していないかの判断しかしていません。
dijsに状態を取得し、dijs.lXで十字キーの左右の状態をあらわしていますが、ジョイスティックの場合は違うのでしょうか?
(文章を書くのが下手ですみません)
898デフォルトの名無しさん:04/12/23 15:59:24
ジョイスティックをキャリブレートして確かめた後にDirectXのヘルプを
ダウンロードして読んで、それでもわからないならDirectXスレに行って質問してください
899898:04/12/23 16:01:33
あげちた。スマソ
900デフォルトの名無しさん:04/12/23 16:19:57
了解です
901791:04/12/23 16:57:04
>>883
CreateFileはネット上にサンプルもあったので、なんとか
できました。
今、DeviceIoControlについて調べています。
こちらは、Delphiでのサンプルがネット上にも少ないので、
苦戦していますが、がんばってみます。
902デフォルトの名無しさん:04/12/23 17:35:38
質問なのですが
OSはXP
Visual.net C++ を使用しています

マルチメディアタイマーを使用するときは
プロジェクトにwinmm.libを参加させます
と書いてあるのですが
これはどのようにやればいいのでしょうか?

教えて下さい
903デフォルトの名無しさん:04/12/23 17:40:01
>>902
ソリューションビューからプロジェクトアイコンを右クリックし [プロパティ]
[構成プロパティ] - [リンカ] - [入力] - [追加の依存ファイル] に winmm.lib
904デフォルトの名無しさん:04/12/23 18:47:09
質問なのですが

>プロジェクトにwinmm.libを参加させます
などという莫迦な言い回しは
どこに記述されているのでしょうか?

笑いたいので教えて下さい
905デフォルトの名無しさん:04/12/23 18:50:27
>>904
検索しろよ莫迦
906デフォルトの名無しさん:04/12/23 23:12:27
>>902
#pragma comment(lib, "winmm.lib")
907デフォルトの名無しさん:04/12/24 00:20:19
WM_KEYDOWNでVK_TABやVK_LEFTのときに
SHIFTもいっしょにおされていたかどうか
調べるにはどうするんでしょうか
908デフォルトの名無しさん:04/12/24 00:25:19
GetKeyStateなど
909デフォルトの名無しさん:04/12/24 00:35:21
おばかな質問でごめんなさい。
用語をあまり知らないので、ググり方もよく分かりません。
やろうとしていることが、もしかしたらAPIというものを使えば出来るかもしれない
ということを知るまでに、かなりの時間を費やしたのアホです。
使えるのはAccessVBAのみ

最小化されてタスクバーにおさまっちゃった状態のアプリケーションを、
表舞台に引っ張り出す方法を教えてください
910デフォルトの名無しさん:04/12/24 00:42:57
91169式フリーPG ◆hND3Lufios :04/12/24 00:49:58
Alt とTabを押す
912デフォルトの名無しさん:04/12/24 00:55:06
>>910
すみません
ググルための語彙力の限界というか・・・
アプリケーション アクティブ化 API とかでググッたら、それっぽい自作関数が紹介されてたんですけど、
これが使えるのは、最前面にあるAccessのすぐ真裏でひそかに生きてる状態だけでした。
(こんな言い方で分かっていただけますか)
最小化されてタスクバーにおさまっちゃった状態では通用しなかったんです。

>>911
sendkeys "%{Tab}"
でもどうにかいけることはいけるんですけど、
できれば、タスクバーにおさまっているものの中からアプリケーションを指定して、引っぱり出したいな
と。(いくつもあると、何が出てくるか分からないので)
91369式フリーPG ◆hND3Lufios :04/12/24 00:56:06
Alt とTabを押す
91469式フリーPG ◆hND3Lufios :04/12/24 00:56:38
ゴメン。。。
915デフォルトの名無しさん:04/12/24 00:57:25
>>902 >>906
ありがとうございました

>>904
猫でもわかるWINプログラム 第1版の
P196ページにかかれて降りました
916デフォルトの名無しさん:04/12/24 08:30:03
順を追って読め
917デフォルトの名無しさん:04/12/24 08:34:04
XPの「アクティブでないインジケータを隠す」の個別アイコン設定を
変更&適用する方法、どなたかご存じでしょうか。

どうしても設定が保存されないアイコン(サービス類)を、スタートアップ
で変更&適用出来たらなと思っているのですが・・・
918デフォルトの名無しさん:04/12/24 10:10:43
>>917
ここらへん。詳しいことは知らない
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify
919デフォルトの名無しさん:04/12/24 12:43:26
DOS用プログラムをコマンドプロンプトを表示しないで
実行しつつ、そのプログラムの吐いた標準出力の結果を
得るにはどうしたら良いのでしょうか?
920デフォルトの名無しさん:04/12/24 13:19:01
>>905
「させます」取ってみた。あぁ、噂の「猫」か。
HTML も酷ぇなw
921デフォルトの名無しさん:04/12/24 13:29:42
>>919
if (CreatePipe(&hRead, &hWrite, &sa, 0)) {
  if (DuplicateHandle(GetCurrentProcess(), hWrite, GetCurrentProcess(), NULL, 0, FALSE, DUPLICATE_SAME_ACCESS)) {
    PROCESS_INFORMATION pi;
    STARTUPINFO si = {sizeof si};
    HANDLE hOutputOld = GetStdHandle(STD_OUTPUT_HANDLE);
    SetStdHandle(STD_OUTPUT_HANDLE, hWrite);
    if (CreateProcess(NULL, pszCmdLine, NULL, NULL, TRUE, DETACHED_PROCESS | NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) {
      CloseHandle(pi.hThread);
      WaitForSingleObject(pi.hProcess, INFINITE);
      CloseHandle(pi.hProcess);
      SetStdHandle(STD_OUTPUT_HANDLE, hOutputOld);
      // ここでReadFile(hRead, ...);
    }
  }
  CloseHandle(hWrite);
  CloseHandle(hRead);
}
922デフォルトの名無しさん:04/12/24 13:32:17
HANDLE hReadm hWrite;の1行を書き忘れた。書き足しておけ。
923デフォルトの名無しさん:04/12/24 13:34:18
命令するな!
924デフォルトの名無しさん:04/12/24 13:38:14
>>923 (°Д°)ハァ?
お前はコマンドプロンプトを絶対に使わないんだな!!
925919:04/12/24 14:36:34
>>921
なるほど、パイプですか。
パイプは使った事無かったので盲点でした。
ソースまで書いて貰いありがとうございました。
926デフォルトの名無しさん:04/12/25 03:22:54
自分のスレッドのIDを後から知りたいのですが、
よろしければ取得APIを教えて頂けないでしょうか。
927デフォルトの名無しさん:04/12/25 03:28:28
GetCurrentThreadId
928926:04/12/25 03:29:37
検索ワードを変えたらあっさりヒット、失礼しました
GetWindowThreadProcessId
929926:04/12/25 03:30:15
>>927
重ね重ねすいません、そっちの方が良さそうですね
ありがとうございました
930デフォルトの名無しさん:04/12/25 03:31:08
spawn しまくってる香具師はパイプカットしろ
931デフォルトの名無しさん:04/12/25 10:11:34
VC++で特定フォルダのファイルの書込み更新の監視プログラム
を作成したいのです。

http://www.athomejp.com/goldfish/api/filechangenotification.asp
を参考に行っているのですが、ファイルの書込みを行った時点でスレッ
ドが2重で実行されてしまいます。

これを回避する方法はあるのでしょうか?
Sleep等で時間調整を行ってもだめでした。

FindNextChangeNotificationで次期の監視を開始する際にうまく
いっていないような気がします。
932デフォルトの名無しさん:04/12/25 10:17:27
BST_CHECKEDのBSTは何の略?
933デフォルトの名無しさん:04/12/25 10:26:15
ボケ死ねタコ
934デフォルトの名無しさん:04/12/25 10:28:33
>>931
参考サイトだけ見せられても…
実際のコードは?
935932:04/12/25 10:32:26
自己れす、ボタンステートですた。
936デフォルトの名無しさん:04/12/25 10:57:44
934>
今はまだ設計開始中のため考慮している段階です。
ファイルの書込み更新時点でファイルをリードして内部
処理するのが目的なのですが、何か良い方法はあるので
しょうか?
937デフォルトの名無しさん:04/12/25 10:59:59
>>936
単に不具合なんじゃないかって、話しだと思われ
938デフォルトの名無しさん:04/12/25 11:09:16
>>936
喪前がうまくいかないってコードを見せればいいんだよ。
939デフォルトの名無しさん:04/12/25 11:27:45
取りあえずどういうタイミングで通知が来るのか、
書き込んだりフラッシュしたりちょっと待ってみたりしてしっかりチェックしてみな。
940デフォルトの名無しさん:04/12/25 13:16:29
プロセスごとに使用するネットワークのバンド幅を制限したいのですが、
このようなことは Win API で可能でしょうか?
941デフォルトの名無しさん:04/12/25 13:49:32
プロセスごとに制御できるかどうかはしらんが
QoSで調べてみれば
942デフォルトの名無しさん:04/12/25 20:39:22
>>940
Windows2000以降ならできると思う。

NEGiESとか、フリーウェアでやってるので、マイクロソフトとNDA結ばなきゃ使えないAPIなんてことはなさそう。
943デフォルトの名無しさん:04/12/25 20:59:05
>マイクロソフトとNDA結ばなきゃ使えないAPI
そんなものはありません。
944デフォルトの名無しさん:04/12/25 23:48:57
あります
945デフォルトの名無しさん:04/12/25 23:56:05
>944
表向きだけな。
946デフォルトの名無しさん:04/12/25 23:57:42
表向きってどういうこと?
947デフォルトの名無しさん:04/12/25 23:59:29
>946
いや、むしろ
表向きってどういうこと?ってどういうこと?
って聞き返したいんだけど。
948デフォルトの名無しさん:04/12/26 00:32:41
って聞き返したいってどういうこと?
949デフォルトの名無しさん:04/12/26 00:39:04
>>944
表向きでもいいんだけど、例えばどんなやつ?
950デフォルトの名無しさん:04/12/26 01:10:53
OTLSとか。
951デフォルトの名無しさん:04/12/26 01:43:06
BITMAPV4HEADER / BITMAPV5HEADER の後ろのほうのメンバの使い道を教えてください。
LOGCOLORSPACE 構造体によく似ているので関係あるんだと思うんですが、ICM の使い方もよくわかりません。
952デフォルトの名無しさん:04/12/26 06:13:37
>950
どこでその名を知った?場合によってはその書き込みはまずいぞ。
953デフォルトの名無しさん:04/12/26 06:51:02
Open Type Layout Service Libraryがどうしたって?

http://www.microsoft.com/typography/developers/otls/default.htm
954デフォルトの名無しさん:04/12/26 09:38:01
>953
お前、契約書ちゃんと読めよ・・・信じられん。
うちの社員だったらクビ飛んでるぞ。
955デフォルトの名無しさん:04/12/26 10:25:02
文字列検索できる関数とかってありますか?教えてください。お願いします
956デフォルトの名無しさん:04/12/26 10:42:39
>>955
ない
957デフォルトの名無しさん:04/12/26 12:49:46
>>953
詳しく
958デフォルトの名無しさん:04/12/26 13:45:22
>>954
詳すぃく
959デフォルトの名無しさん:04/12/26 14:02:12
>>955
詳すぃくゅ
960デフォルトの名無しさん:04/12/26 14:32:29
>>959
kwaswique
961デフォルトの名無しさん:04/12/26 15:02:31
strstr
962デフォルトの名無しさん:04/12/26 15:21:36
>958
経験ないと分からない思うが、>953のようにリンクを
貼る行為は完全にNG。契約違反になるから説明できる
とこがほとんどないんだけど、当事者になったときに
分かるよ。とりあえず>953はやばい。
963デフォルトの名無しさん:04/12/26 15:51:22
>>962
マジで?
オレには http://www.microsoft.com/typography/otls.mspx の旧URLのように見えるんだが。
964デフォルトの名無しさん:04/12/26 15:55:14
>>962
「OTLS」「Microsoft」でググるとトップに出てくるURLなんだけど、
それが機密情報名わけ?ww
965デフォルトの名無しさん:04/12/26 16:03:50
もう、おばかさん多いな...
966デフォルトの名無しさん:04/12/26 16:36:07
やばい情報なら誰にでも見れるところに置くのはまずいと思うが…
967デフォルトの名無しさん:04/12/26 16:37:15
どのみちURL出すとまずいような場合は最低でもbasic認証しておかないと法的根拠はないんじゃないか?
968デフォルトの名無しさん:04/12/26 17:20:58
>>967
なんでBasic認証限定なの?
969デフォルトの名無しさん:04/12/26 17:22:34
君以外は誰も限定なんてしてないよ。
970デフォルトの名無しさん:04/12/26 18:08:58
おまいら釣られすぎだぞ!
971デフォルトの名無しさん:04/12/26 21:01:48
>>968
最低でもってかいてあるじゃん
972デフォルトの名無しさん:04/12/26 21:02:55
>970
そう。962は俺が書いたんだけど、君だけが正解。
973デフォルトの名無しさん:04/12/26 21:03:21
>962=>970
自演決定。
974デフォルトの名無しさん:04/12/26 21:04:21
>964
契約書は読んだ?したっぱPGはそんなの気にしねーのか。
機密とかまったく関係ないよ。
975デフォルトの名無しさん:04/12/26 21:23:28
974よ、これか?
ttp://japan.internet.com/busnews/20030423/11.html
たぶん、一番したの記述っぽいがよーわからん
976デフォルトの名無しさん:04/12/26 21:27:15
>>974
953の書き込みがやばいやばいって言うから、
950のOTLSって単語に色つけてぐぐれば
契約云々関係ない第三者でもすぐ分かるぞってことでは。
977デフォルトの名無しさん:04/12/26 22:22:30
ネタにまじレスしてる場合か?
もうすぐ正月だぞ
978デフォルトの名無しさん:04/12/26 22:50:19
>>977
もちつき、忘れるなよ
     /\⌒ヽペタン
   /  /⌒)ノ ペタン
  ∧_∧ \ (( ∧_∧
 (; ´Д`))' ))(・∀・ ;)
 /  ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O   ノ ) ̄ ̄ ̄()__   )
 )_)_) (;;;;;;;;;;;;;;;;;;;)(_(
979デフォルトの名無しさん:04/12/26 23:10:32
みんな、コード書いてる場合じゃないぞ!

    |___|⌒ヽペタン
  .∩   ||  ⌒)ノペタン∩
   | | /二つ  ((.⊂ニヽ| |
  (,,  ゚)|    )) (゚Д゚,,)
  ノ  つ  ( ⌒ヽ ⊂,,ヽ
  O   ノ   ) ̄ ̄ ̄((_ ( )O
 (/ (/    (;;;;;;;;;;;;;;;;;;;)∪ヽ)
980デフォルトの名無しさん:04/12/27 02:20:21
ネットにはいつもいるMr.守秘義務君が大騒ぎしただけだろ
981デフォルトの名無しさん:04/12/27 02:51:10
ListViewCtrlのソートに関する質問です。
ソートを実行するコールバック関数で返した結果はすぐにリストに反映されるのでしょうか?

リストアイテムのユーザデータにそのアイテムが登録された時のインデックス番号が格納されてあり、
コールバックに渡される2つのユーザデータから該当するカラムのテキストを取得して比較を行ってます。
こういう実装方法だとコールバックが返した結果がすぐにリストに反映されてしまうと
比較を行うたびに予め設定してあったインデックス番号が狂ってしまいますよね?

正しくソートを実行するためにはソートを実行する前にソートを行うテキストを
ユーザデータとして設定するような事を行わなくてはならないのでしょうか?
コールバック内でListView_FindItemするんでしょうかね。
みなさんはどう実装してますか?
982デフォルトの名無しさん:04/12/27 03:00:11
意図ようがわからんが、
最初にやることはデバッガで追う事。
まあ回答してやってもいいが、
例えば俺がサイコロ振って適当に「反映されます」と回答したとして、
それを信用するかね?
まあするんだろうね。
確率は1/2だから悪くはないわな。

というわけで、
最初のは「反映されません」

2番目は「行う必要はありません」
つーか、なんのためのコールバックかよく考えてみ?

最後のは「実装したことはありません」
これでどうだ
983デフォルトの名無しさん:04/12/27 03:01:49
1こ抜けてたが
>狂ってしまいますよね?
に対しては、
「はいそうですね。」

以上だ。
984デフォルトの名無しさん:04/12/27 03:06:14
知らないなら何も書かなくていいんですよ
985デフォルトの名無しさん:04/12/27 03:07:14
残念ながら1/2の確率で知ってるんだが
986デフォルトの名無しさん:04/12/27 03:11:49
ボキャブラリが許せばサイコロの面数によって微妙な回答も可能だね
987デフォルトの名無しさん:04/12/27 03:13:06
では100面ダイスをどうぞ
988デフォルトの名無しさん:04/12/27 03:14:06
OTLSってネタかと思ったよ。

だって、OTL ですよ。
989981:04/12/27 03:16:41
>>982
ええとですねデバッグして検証はしたんです。
コールバック内で取得したテキストとソートを実行する前に予め設定したテキストを比較してみた所
まるっきり一致しませんでした。

で、ネットでいろいろなサンプルを漁ってたんですがその中に前者の方法でテキストを取得している
サンプルが幾つかあったので混乱したんです。
何らかのフラグの設定で反映されたりされなかったりするんかなとか思ったりもしたので
経験者の意見を聞きたかったわけです。

いろいろ試した結果最終的にはユーザデータをキーにListView_FindItemで検索したインデックス番号で
テキストを取得するようにしました。効率悪そうですが。
990デフォルトの名無しさん:04/12/27 03:19:45
方法わかんないならソートをListViewの外でやって
後で一気にViewに反映した方が後々良いと思うんだが
目的がListViewのエキスパートになりたいならともかく
991981:04/12/27 03:24:57
>>990
その方法は効率良さそうですね。盲点でした。
何が何でも中でソートする必要なんてないですもんね。
助言ありがとうございました。

>>982
そういえばお礼言ってませんでした。
大変親切な助言ありがとうございました。
992デフォルトの名無しさん:04/12/27 05:09:04
>991
>その方法は効率良さそうですね。盲点でした。

えー
993デフォルトの名無しさん:04/12/27 08:15:46
>>981
そこで仮想リストビューですよ
994デフォルトの名無しさん:04/12/27 08:18:56
文字列検索できるAPIとかってありますか?教えてください。お願いします
995デフォルトの名無しさん:04/12/27 09:07:07
>>989
私は登録順をユーザデータとして設定しているよ。
ソートのときはそれを利用している。
高々1000件くらいのリストならそれで充分ことが足りている。
996デフォルトの名無しさん:04/12/27 09:57:24
>>994
そんなAPIはない
997デフォルトの名無しさん:04/12/27 10:11:23
↓次スレよろしく。 ちなみに、plalaは建てられませんでした。orz
998デフォルトの名無しさん:04/12/27 10:15:31
999デフォルトの名無しさん:04/12/27 10:25:49
999
1000デフォルトの名無しさん:04/12/27 10:26:45
 
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。