クライアント(描画領域)サイズを 640x480 にしたい場合 ウインドウスタイル(枠線やらメニューやら)によって ウインドウ生成時のサイズが変わりますよね 650x510(←てきとう)みたいに大きめに。 クライアントサイズをw*hにしたい場合は、(このウインドウスタイルなら)W*Hで作れるよ。 って数値を逆算してくれるAPIってありますか? 無いなら、それを計算する方法を説明したサイトってありませんか?
>>356 AdjustWindowRect
って、前スレにも同じ質問があったような・・・
AdjustWindowRectEx
大変、申し訳ございませんが、ひとつ教えていただきたいことがあります。 ローカルマシンでなく、ネットワークのマシンで、 プロセスを列挙するようなAPIってないでしょうか? また、そのプロセスがどのユーザで動いているか わかることができればより助かります。 WTSEnumerateProcessesとLookupAccountSidを 組み合わせれば可能であることを確認したのですが、 ターミナルサービスに対応していないと駄目なようなのです。 WinNT Server、Win2000 Server、Win2003上で確実に動作する。 そんな素敵なプロセス列挙APIをご存知ないでしょうか? 教えてくださいこのやろうども。
>>308 >>314 >>315 >>316 レスありがとうございます
>>314 環境がPerlでWin32-APIを使っているもので、変数が定義されていないからです
環境の記入漏れがあって申し訳ありません
>>315 実際は3回行っていました
仰る通りPostMessageにしたら期待通りの動作が出来ました
ありがとうございました
実際のキーボードもこのようにリターンを待っているのでしょうか
>指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返しません
と言う記述を見て、キーボードは返り値を待たないのではと勝手に思い込み
この関数は試していませんでした
勝手な思い込みはダメですね、気をつけます
三回入力されていた原因は、WM_KEYUPのlParamを0xC01E0001にしていなかった ミスによるものでした lParamを0xC01E0001にしたところ、二回入力となりました SendMessageではWM_CHARを送らなければ文字は入力されませんでした
そりゃTranslateされないからだべ
>>359 質問の意味が良くわからん。
WTSEnumerateProcessesとLookupAccountSidの使い方が分からんという意味なのか?
>>364 WTSEnumerateProcessesとLookupAccountSidを使って目的は果たせたのですが、
この方法はNTではできないので、NTでもできて欲しいのです。
NTサーバでも動くものもあるのですが、
Windows NT4.0 Terminal Server Edition SP4でないと動かないみたいなので。
無視されるかと思ってたのですがレスありがとう。
ちょっと興味があったんだが、
>>302 の質問って誰も答えられないのか?
うん
>366 このスレのレベルじゃ当然。
>>341 sendのあとで、すぐにrecvすんなよ。
select使えよ。
>>302 漏れは全然この辺知らないので、基本的なところの確認。
・ImpersonatLoggedOnUser はサーバOSでしかサポートされていない。
・CSRSS.EXE は、SeDebugPrivilege privilege が無いとHookできない。
・SetWindowsHookEx は User32.dll とリンクしていないプロセスや、システムサービスをHookできない。
なんとなく上の2つが引っかかってるような気が・・・
>369 理由は?
固まるからじゃねーの?真意は知らんが。
2つのビットマップを異なるパレットで表示したいのですが、 どうしたらよいでしょうか? パレットをあらかじめ2つCreatePalette()で作っておいて、 SelectPalette(hDC, hPalette1, FALSE); RealizePalette(hDC); SetDIBitsToDevice(); /* 1つめのビットマップ */ UnrealizeObject(hPalette1); SelectPalette(hDC, hPalette2, FALSE); RealizePalette(hDC); SetDIBitsToDevice(); /* 1つめのビットマップ */ ではだめでしょうか?
>>289 デスクトップの数だけスレッドを作ってSetThreadDesktopすればいい
377 :
デフォルトの名無しさん :04/12/08 23:24:05
>>374 パレット弄ってもビデオモードによっては意味無いんじゃないの?
>>374 SetDIBitsToDevice に渡している Bitmapinfo に色情報が入っていればちゃんと出るはず。
モーダルダイアログボックスのタイトルバーの文字をGetWindowText関数で取得して それをSendMessage関数でメインウィンドウに送ってるのですが なぜかモーダルダイアログボックスのタイトル文字が変化してしまいます。 GetWindowText(mod,buf,300); SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)buf); modがダイアログボックスです。原因を教えてくださいお願いします
>>379 SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)TEXT("タイトル"));
でも、モーダルダイアログの方が変わるのか?
hwndの値は間違ってないか?
>>380 いまためしたのですがダイアログの方が変わります。値とはなんでしょうか?変数名は間違ってません
ちなみにこれを記述してる場所はダイアログボックスのプロシージャの中です
だからさ、hwndの値がダイアログのものになってるんだろ?
なんでしょうかじゃねえだろ値をもたない変数などねーんだよ
なるほど、知りませんでした。では値を変える方法を教えてください。お願いします
すれ違い
>>386 (゚Д゚)ハァ?、いきなりスレ違いはねぇだろカス。
では引き続き値を変える方法を教えてください。お願いします
君には無理
わからない方の低脳なレスはいりませんので 引き続き値を変える方法を教えてください。お願いします
>379 念じろ。念じるんだ。値が変わるまでこのスレくんな。
調べてみるとウィンドウハンドルの値はすべて同一の値をとっている ようなのでIDとして有効なのはそのウィンドウが存在する間だけのようです。 どうやら、みなさん低脳なようなので自分で模索することにします
>>391 ここの人は丁脳なので、あなたの言ってる事が理解できませんでした。
レスを強制終了します。
変数を知らないでプログラム組めるなんて凄い。
>>393 ( ゚,_ゝ゚)真性の馬鹿はとっとと死ねよww
だからさ、hwndの値がダイアログのものになってるんだろ?
いままでダメな奴いろいろ見てきたけど 変数の値の変え方聞く奴は始めて見た。
>396 お前分かるの?
みんな釣られすぎ
>>379 hwndにメインウィンドウのハンドルを代入(変数の値を変える)してください。
それで解決です。
>399 代入ってどうやるんですか?
すいません。>400は399じゃなくて379でした。 ご迷惑おかけして本当に申し訳ありません。
>>396 言ってる意味全然わかってないでしょボクちゃん?ww
変数の値とかじゃないの。わかる?w
>>399 ( ゚,_ゝ゚)おめーもとっとと死ねよww
解決しました。マジですいませんでした。数々の暴言と無礼をどうかお許しください
許すわけないだろ
>>404 許してほしいと思うなら、なんで解決したか言ってから帰れよ。
>>372 それは逆だス。recvしないから固まるはず。
全部recvし終えてから、sendしないと固まる可能性あり。
ところで漏れの質問はやっぱり無理ッス化。
EXEやDLLを作り出すアプリを作るために必要な情報ご存知ありませんか?
PEフォーマットの話か?
コンパイラ作るのか? それともジェネレータ(だっけ?)作るのか? 同じ挙動で数値(色とか大きさとか)だけ変えるなら、バイナリ操作だけでいけるだろ
>>408 ,409 アドバイスありがとうございます。説明不足ですみませんでした。
ActiveScriptで制御可能なエンジン部があってそれを単一のEXEなりDLLにしたいと
思っているのですが、その後いろいろ調べてみて、以下の方法で行けそうな気が
するのですがいかがなものでしょう?それはダメだとか、普通はこうするだろなど突っ込み
いただけるとありがたいです。
1 .ダミーのリソース(スクリプトやそれが必要なリソースをパッケージしたもの)を含んだ
EXEあるいはDLLのファイルをあらかじめ用意しておく。
2. BeginUpdateResource、UpdateResource、EndUpdateResourceを使って、それを
書き換えるて、新しいEXEあるいはDLLのファイルを作成する。
3. 作ったEXEあるいはDLLのファイルの実行時、FindResource、LoadResource、LockResource
を使ってリソースからスクリプトなどを取得して実行。
>>410 exeファイルに関しては単純にランタイムのexeの後ろにゴミ(スクリプト)くっつけただけってのはよく見る
>>413 WMIのWin32_Processクラス辺りじゃダメかな
ローカルマシンでしかやったことないけど、
WMI自体はリモートマシンにも対応してるはず・・・
リソースに組み込む方法、単純にEXEの後ろに追加する方法、両方で実現できました。 ありがとうございます
メインウィンドウをオーナーウィンドウとしたダイアログボックスで ダイアログボックスを最小化してからメインウィンドウを最小化し 再びメインウィンドウを元にもどすとダイアログボックスも元に戻ってしまいます。 なぜでしょうか?原因を教えてくださいお願いします
417 :
デフォルトの名無しさん :04/12/09 17:44:15
HSPでRPG作りたいんですが、正直難しいと思います。 でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド) ぐらいなら作ったことあります。 今のところ、オープニングまで作ったのですが、どなたか僕に HSPの基礎からすべてを叩き込んでくれませんか?? お願いします。
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 がエラーを返すのにすごく時間がかかってしまいます。 対策として、秒数を指定しタイムアウトしたいのですが、 設定する方法はあるのでしょうか?
>>378 アドバイスありがとうございます。
Bitmapinfoの色情報がちゃんと入っていませんでした。
(まだ修正して試してませんが)
これから試してみます…
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();
外部プログラムからは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); }
ExecTest内でパラメータを保存した直後にg_pTestParamのメンバを 参照すると全て正しい値が入っていたので保存できたかに見えた のですが、TestThread内の★★★の位置でg_pTestParamのメンバを 参照すると、一部の文字列メンバが空っぽになっていました。 そもそも*g_pTestParam = *pTestParam; という書き方がまずいのでしょうか。 メンバは整数とポインタだけなのでOKかなと思ったのですが。 おかしいところがありましたらご教授お願いします。
すいません。訂正します。 誤)グローバル変数pTestParam 正)グローバル変数g_pTestParam
>>422 aaa とかの指してる中身もコピーして保存しておけ。
strdup とか使う場合には _beginthreadex を使え。
Cライブラリを一切使わないならCreateProcess で良いけど。
>426 ありがとうございます。やってみます。
お騒がせしました。動きました!ありがとうございました。
現在のOSのバージョン・SPの適用状況はGetVersionExで取得できますが、 ほかにインストールされているOSやCD-ROMのバージョン・SPの適用状況を取得するには どのようにしたらよいでしょうか?
CD-ROMのバージョン?
現在起動してるOSではなく、ドライブ上にただ存在しているだけのOSの 種類やバージョンを知りたいって事?
ext2やext3(その他色々)も読まなきゃならんのか?
VMwareとかがインストールされていて その中にOSがあったらそのバージョンを 知りたいんです。
( ´_ゝ`)フーン
何にせよ、「Win32API」の範疇の話では無いな。
よくしらんがVMwareってディスクイメージをWindows上の単一ファイルとして イメージ作ってたりすんじゃないの? そうでないものはひたすらファイル読みまくってDLLのバージョンリソースでも チェックしたら?
すいません、OSというのはWindowsのことで、CD-ROMとはインストールCDのことです。 IEは特定のファイルからバージョンを取得できるのですが、 Windowsそのものについてはそのような方法を見つけられませんでした。 GetVersionEXも何らかのファイルのバージョンを返していると思うのですが、わかる方いませんか?
version.dllとか?
Windowsのバージョンって、プロンプトでverって打ったら出てくる文字列でOKか? 取得する関数があったり、レジストリからチェック出来たり、色々方法があった気がするけど
CDのディスクラベルじゃないのか?
↑ボリュームラベル
445 :
デフォルトの名無しさん :04/12/10 21:04:05
細かいこと言い出すと DLL のサイズだの CRC あたりまでチェックせにゃならんなw
またまたすいません。
>>429 ではAPIがあるかもと思って書いたのですが、
レスを見てなさそうだったので
>>437 で言い直しました。
>>438 >>440 ありがとうございます。でもSPの取得までは無理そうですね・・・
>>439 MSIというのがよくわかりませんが、たぶん違うと思います。
>>441 それならGetVersionExでできるのですが・・・
>>443 ボリュームラベルならGetVolumeInformationで取得できてます。
スレ違いになってきたので逝ってきます。スレ汚しすいません。
447 :
デフォルトの名無しさん :04/12/11 04:16:18
カレントディレクトリを移動する方法を教えてください。
>>446 サービスパックとかの情報か。レジストリに検索かけてみたら、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP
に、サービスパックとホットフィックス情報があるっぽい
>>447 _chdir()
ワイド文字版がよければ
_wchdir()
>>447 SetCurrentDirectory() もよろしく
日本語を含む文字列の中から日本語を検索するときは strstrじゃなくて_mbsstrじゃないとまずい?
まずい strstrでは予期せぬ物がヒットする可能性がある。
せっかくだから _tcsstr にしたほうが。
Shell APIのStrStrではどうだろう。 (IE4以降が必要になるけど)
>452 そうなんですか。どういう場合にNGになるんでしょうか。
2バイト文字を含む場合
char *p = strstr("予約", "\\");
あ、日本語を検索する時の話か。スマソ。
>>458 は忘れて。
>457 試しに "aaaaaaあいうえおbbbbb" の中から "あいうえお" を 検索してみたら問題なかったのですが、例えば特定の文字コードを 含む文字が含まれているときはうまくいかないことがある、 みたいなことなんでしょうか。
>>460 char *p = strstr("例文", "癜");
たとえばこんなのがヒットしてしまう。
おっと補足。
>>461 は文字コードがShift_JISの場合だからな。
>461 おお、ありがとうございます。文字コードで見ると 97 E1 95 B6 から E1 95 を 探すからヒットしちゃうってことですね。
>463 この辺の問題が_mbsstrにすれば解決するんですかね。 ちなみに>453さんの_tcsstrはどういうときに使うのでしょうか。
>449>450 ありがとうございました。
そういえば、Win32プログラムを作ってて カレントディレクトリを気にすることってあまりないよね。
>>467 カレントディレクトリをリネームとか
削除しようとすると問題になるよ
>468 >467が言っているのはそういうことじゃないと思う。
>>468 そもそもそんなどんなときにそんな事態が発生するというのか
フルパスで指定しなければ、ファイルを開くのもディレクトリを操作するのも カレントディレクトリを対象にするんじゃないか?
>>416 >>454 自信ないけど、たぶん仕様だと思うよ。
俺も昔、同じ現象に悩まされたことがあって、結局オーナーをNULLにすることで解決したような…
>>471 そうだよ。でもたいていフルパスで指定するよねって話だと思う。
474 :
デフォルトの名無しさん :04/12/11 18:41:13
フルパスじゃないと基準がないしな。 一度ファイルオープンダイアログ開いた時点でカレントはそのフォルダにチェンジされちゃうしな。 ところでアプリケーションがある位置をアプリ起動時にカレントのフルパスを保存することで とっといてるけどこれってまずい?
Win32プログラムというかGUIプログラムってことなんだろう。きっと。 Win32だったとしてもコンソールアプリは普通カレントディレクトリを基準にするっしょ
>476 なんで?
ダイアログはレジストリを見てる カレントではない
>>477 アプリが存在するディレクトリとカレントディレクトリは一致しないから。
簡単に試せる方法としては、アプリのショートカットファイルをつくって
そのプロパティで作業フォルダを変更してみること。
>479 なるほど
>>479 じゃあ、アプリケーションの位置ってどうやって特定すればいいですか?
>>481 GetModuleFileName(NULL, filename, length)
>482 さすが!
>474etc それって恥ずかしくないか?
BOOL GetOpenFileName(LPOPENFILENAME lpofn); みたいに、ポインタをダイアログに渡して、そのポインタ先にデータを取得するダイアログってどうやって作ってるんですか? int DialogBox(HINSTANCE hInstance , LPCTSTR lpTemplate ,HWND hWndParent , DLGPROC lpDialogFunc); には、ポインタを渡せるような引数は無いのですが…
DialogBoxParam()
488 :
デフォルトの名無しさん :04/12/11 23:15:44
>>486 487 の提案が順当な線だが、
WM_INITDIALOG でオーナーに SendMessage という手もある
>>487 おお、こんなのがあったのか。DialogBox使ってどうやるのかずっと考えてた
ありがとうございます。
>>488 モーダルダイアログって、親ウィンドウはキー入力とか受け付けなくなるけど、SendMessageは受け付けるんですか?
自分では、GetWindowLongのGWL_USERDATAとかみたいに、関数使って無理やり保持させる方法とか考えてた…
>>489 逆にダイアログから親ウィンドウへSendMessageするっていうこと。
>>489 DialogBox() とか DialogBoxParam() は、内部に独自のメッセージループを持っているので、
親ウィンドウのプロシージャもずっとメッセージを受け取れる状態になってるよ。
>>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
これをリモートマシンでも試してみます!
ありがとうございます!
>>490 それは分かってたんですが…
>>491 メッセージ自体はOKなんですね。参考になりました。
(たぶん大丈夫だけど、メッセージは一切受け付けないつもりで実装してたんで、特定の動作で不都合が出てきてりするかも…調べてみます…)
RasHangupで回線を切断させるのに15秒くらいかかってしまうのですが、 これってもっと時間短縮できないのでしょうかねぇ。 接続元の環境はWinXPマシンにINSボード突っ込んで、ISDN回線使ってます。 接続先はYAMAHAのルータです。
それはわざと時間掛かるようになってます。
>>495 あー、そうなんですかぁ。残念。
レス、さんくすです。
497 :
デフォルトの名無しさん :04/12/12 10:23:12
すいません初歩的な質問です。 ネットワークコマンドでnbtstatがありますよね。 このコマンドの中で動いてるAPI関数を知りたいのです。 Pingなどの中身は自力でわかったのですが どうしてもわかりません。
>497 >Pingなどの中身は自力でわかったのですが すげー。よければ教えてください。
>>498 パケットキャプチャーすれば、わかるだろ。
IP Helper APIの組み合わせでできるんじゃないかな。 arpもつくれるはず。
>499 え?パケットキャプチャーでAPI関数の名前が分かるんですか?
>>501 分からない。
デバッガか逆アセンブラを使うとよい。
デバッガではOllyDBGがオススメ。
逆アセンブラではdiswinやdispeが主流。
どれもフリーソフトなので試してみれ。
ま、APIの名前が知りたいだけならメモ帳で開いたら分かるけど。
最近のパケットキャプチャーは使ってる 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がまだ見つかりません・・・
ネーヨ。 そんなもん。
(´゚c_,゚` )まぁまぁ
507 :
デフォルトの名無しさん :04/12/12 13:10:26
今gtk+で音声を再生させるプログラムを作成してるとこなんですけど、わかる人がいたら教えてください。フローチャートでできるだけわかりやすく書いてくれたらありがたいです。
PlaySound()というAPIを一回呼ぶだけでOK
>>507 >フローチャートでできるだけわかりやすく
殺意がわいたw
>509 理由は?フローチャートで分かりやすくよろしく。
まず本人がフローチャートで回答用テンプレを用意すべきだな
┌───┴──┐ │PlaySound ( ) │ └───┬──┘
釣られすぎだゾ
515 :
497 :04/12/12 15:31:33
>>514 それは何でしょうか?
初心者なんで変な質問してしまいすいません。
ただたんにネットワーク上の他端末の端末名やワークグループ名を
取得したいのですけどnbtstatコマンド以外で
可能なのか知りたいのです。
>>515 どんなDLLに依存(ディペンデント)しているか見るツール。
なんでdependsを真っ先に挙げないのか不思議なスレですね。 Windowsのリソースキットに、プロセスが呼び出しているAPIを調べるツールがあります。
>>516 なんでそんな無駄にスレが伸びそうな教え方するんだ。
アプリケーションが外部DLLのどんな関数に動的リンクしているか調べるツール これでnbtstatを調べれば、nbtstatがどんなAPIを使用しているかすぐにわかる
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。 そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。 私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。 私の使い方が悪いのでしょうか? どなたか教えていただけないでしょうか? <コーディング> w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL); w_ret = GetDeviceCaps(w_hdc, HORZSIZE);
>>521 >私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。
ならない。
以上。
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。 そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。 私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。 私の使い方が悪いのでしょうか? どなたか教えていただけないでしょうか? <コーディング> w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL); w_ret = GetDeviceCaps(w_hdc, HORZSIZE);
>>522 インチ当たりのピクセル数から割り出す方法を使うのでしょうか?
もっと簡単な方法は無いのでしょうか?
知っていたら教えていただけないでしょうか?
>>515 > ただたんにネットワーク上の他端末の端末名やワークグループ名を
> 取得したいのですけどnbtstatコマンド以外で
何がしたいのか今ひとつ掴めないがnet view 相当でよければ
WNetEnumResource あたりとか。
Comctl32.dllやcommctrl.hなどの最新のものはどこからダウンロードできるのでしょうか? Microsoftのサイトをかなり探したのですが、どれをインストールしても更新されませんでした。
>>527 Comctl32.dllは最新のIEやそのパッチをあてればいい。
commctrl.hは
>>2 のPlatform SDKから
>>528 ありがとうございます
早速いってみます
530 :
デフォルトの名無しさん :04/12/12 17:48:05
>524 1ピクセルの物理的な寸法を得る手段がないので あきらめるしか無いヌー あるいは、ユーザーに「ディスプレイの正確なdpiを計測してください」と頼むか。
531 :
デフォルトの名無しさん :04/12/12 18:08:34
>>530 アプリごとに実装してたらスーパー馬鹿野郎だな
そーゆーのはOSが持つべき機能
>531 穏やかに行こうぜ。
すいません、もう一つだけ質問させてください Platform SDKをダウンロードして Program FilesフォルダにMicrosoft SDKがフォルダが出来たのですが、 この中身のLib、includeを全て適当にコピーして使ってもいいものなのでしょうか? 何か正しい使い方がありましたら教えていただけませんか?
>>533 コピーするのではなく、インクルードファイルのディレクトリ設定や
ライブラリファイルのディレクトリ設定を追加するほうがいい。
既存のディレクトリよりも優先されるように順番に注意すること。
>>534 分かりました、本当にありがとうございました
536 :
デフォルトの名無しさん :04/12/12 19:15:46
教えてください. プログラムが実際に消費した時間を計測したいです. 今のところ GetProcessTimes() や GetThreadTimes() を使って ますが,Win95系のバージョンでは使えないので困ってます. よろしくお願いします.
>536 「実際に消費」というのはもっと具体的に言うとどういうこと? 実際にかかった時間のこと?
538 :
デフォルトの名無しさん :04/12/12 19:40:39
>> 537 実際に CPU を使用して計算した時間を知りたいです. いわゆる elapsed time のほうではないっす.
BCCで簡単な画像編集アプリを作りたいんですが 一般的なキャンバスの仕組みが分かりません。 灰色の背景に白地のキャンバスエリアだとして、ただ白の短形を描画して その上から線を引くとしたら白の短形を再描画した時消えるし どう作ればいいのでしょうか? 保存する時はクライアントエリア上に直接描かれた絵を1ピクセルずつ色を キャプチャして保存するような感じでいいのですか? リンク探しても、それっぽい内容が見当たりません。 どなたか教えてください。
たんけい選択
短形
たんけいコピー
短茎
544 :
デフォルトの名無しさん :04/12/12 19:58:37
マジワロタ
ググったら結構見つかったよ、短形(w
(・∀・)タンケイ!
>>530 おっしゃる通りみたいでした。
dpiから画面の物理サイズを計測してみたんですが、やはり同じでした・・・。
実際のサイズを知る手段が無いみたいですね。
ありがとうございました。
巨と豆の区別もつかないらしい
ホントにたんけいだと思ってる奴は俺の周りにも 結構いる。仕方ないよ。
巨乳と豆乳の区別はつくぞ。
∩(・ω・ )∩ 短形 ばんじゃーい
あれ? 四角形って短形って言わんのか(;´Д`) >547 ググったけどよく分かりません。「ちらつきをなくす効果」ですよね? 白地に線を引く(Ellipseなどでマウスクリックで描画し続ける)としたら 白を再描画するとクリックした位置はユーザー任意なので線が消えてしまうって事なんですけど。 位置を記録したとしても、描くほど動作が不安定になりそうだし。
市販のライブラリでも使っとけ。 で、四角形は矩形(くけい)だ。
>553 >あれ? 四角形って短形って言わんのか(;´Д`) どんまい。俺も最初読めなかったよ。 学校で習わないもんな。
556 :
デフォルトの名無しさん :04/12/12 21:14:14
>>553 線を追加するたびに、キャンバスのイメージを
バッファ(HBITMAP)に保存しといて、
WM_PAINTが来たときには、バッファの内容を描画する。
>554 ドウモゴシンセツニ。 >555 もう短形でもいいじゃん。 >556 してるじゃん。 >557-558 ありがとうございます。 理屈は何となく理解できました。
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ではコーディングされてないのでしょうか? どんな動作をしているのか見たいのですが、そのような時はどういう風に調べれば よいのでしょうか ヒントだけでもいいので教えてください 検索方法が悪いのか、たいした情報が出てきません・・・
申し訳ありません、名前欄は無視してください (;´Д`)
>>561 好きなの選べ。
・インターフェイスと動作が分かれば十分。MSDNで調べる。
・あきらめる。
・MSとNDA結んでソース見せてもらう。
・リバースエンジニアリングしてもいい国に行く。
・Wineみたいな互換ライブラリの実装から類推する。
>>561 実際のコードは%WINDIR%\SYSTEMの中にDLLとして収められている。
(MSDNのSendInputの項を見ると「インポートライブラリ:user32.lib を使用」と書いてあるのでSendInputはUser32.dllにある)
当然Cのソースコードとして読むことは不可能。
せいぜい逆アセンブルするまでしかできない。
すいません。どうかしてました。訂正します。 私の拙い知識で思いつく限りでは、以下の方法が考えられます。 ・インターフェイスと動作が分かれば十分。MSDNで調べる。 ・あきらめる。 ・MSとNDA結んでソース見せてもらう。 ・リバースエンジニアリングしてもいい国に行く。 ・Wineみたいな互換ライブラリの実装から類推する。
566 :
497 :04/12/12 22:59:39
教えていただいたツールを使って NBTSTATを解析して調査してみます。 すごく・・・便利なルーツですね。
ここはマ板じゃないんだけどなぁ・・・ネタは程々に。
>566 ルーツ?
570 :
デフォルトの名無しさん :04/12/12 23:45:19
くんたきんて
netstat ≠ nbtstat
574 :
497 :04/12/13 00:18:49
みなさん、いろいろすいませんね。 自分の組織にあったネットワーク管理ツールを作ってまして VC言語の作り方忘れたので、VB6でAPI使ってます。 マルチプロセスで動かすのでちゃんと動くか怖いですけどね。
578 :
497 :04/12/13 01:00:09
うちの組織にあったDBで管理できるものもないし、 自分の勉強の為ででもあります。
579 :
デフォルトの名無しさん :04/12/13 01:48:10
自分が食ってるメモリを取得する方法はあるかね
>>563-564 レスありがとうございます
良くわかりました
Wineっていうのを調べてみます
ありがとうございました
582 :
デフォルトの名無しさん :04/12/13 07:12:02
ShellExecuteとCreateProcessを使って 他のプログラムを起動しているのですが、 メモ帳が「notepad」で開けるのですがこれは何故でしょうか? IEをプログラムの名前だけで開きたいのですがどうすればいいでしょうか?
>582 パスが通ってるから。
584 :
デフォルトの名無しさん :04/12/13 07:36:03
>>583 それはどこかに定義してあるのでしょうか?
また、IEの場合はなんといれればよいのでしょうか?
>>579 GlobalMemoryStatus(Ex)
EnumWindowsをコールして、コールバック関数内では GetWindowThreadProcessIdを使ってプロセスIDを求めたいんだけど、 なぜかGetWindowThreadProcessIdで異常終了してしまう OSはWindows2000 心当たりある人いませんか?
_beginthread(あるいは_beginthreadex)が返すハンドルに対して SuspendThreadやResumeThreadを使うのはOKなんですか? 一応期待した挙動はしているみたいなんですが、 MSDNにはそれらしい記述が見つからないので教えてプリーズ。
C ランタイム ライブラリのデータ構造体へアクセス中のスレッドがあって、 それの完了を待っている複数のスレッドが存在する場合に SuspendThread を使うと、 デッドロック状態になります。
>>591 _beginthreadexの方でも?
解決する方法はありますか?
C ランタイム ライブラリを呼ばないとか呼ぶときは排他制御するとかの泥臭い方法しかないですか?
>>592 ISBN4-7561-1404-0
198ページ
>>592 スレッド管理する場合は、
もっと大きめの単位で待ち合わせとかするのが普通のような気が。
先方が何してるんだかわからない状況で SuspendThread は乱暴・・・
というかそんなパターンあまり便う場面なくない?
そもそも SuspendThread() 自体が、よほどのことがない限り使っては いけない API です。使いこなすのは難しい。
>
>>596 確かに。自分自身をSuspendThreadするってケースでしか使わないなぁ・・・
>>587 ソース見せて。
CALLBACK キーワードがついてないとか?
VB6.0で作った画面からVC6.0で作ったDLLを呼び出す際、 引数にVBの関数のポインタを渡し、DLLからそれを コールするような処理を書いてみました。 問題なくコールできたのですが、DLL内でスレッドを生成し、 そのスレッド内からコールすると、「ハンドルできない例外」が 発生してしまいます。このような呼び出し方はやっては いけないことなのでしょうか。
>599 ちなみにデバッグで起動すると問題ないのですが、 VBでexeを作って起動すると失敗します。
>599-600 すいません。勢い余ってここに投稿してしまいましたが、 よく考えたらスレ違いでした。>599-600は取り下げ させてください。VBスレの方で質問しなおします。
DLLで生成したスレッドから何をコールしたんだろう(´Д`;) VBスレのほうではちゃんと質問内容を明確にしてね
VBの関数かorz
VB6はSTAなんだな。
>>586 それでやったんですができませんでした。
ファイル名を指定して実行するウィンドウではそれで起動できるのですが、
ShellExecuteやCreateProcessだと起動しませんでした。
CLSIDを"CLSID_InternetExplorer"に指定して CoCreateInstance()を呼べばいいと思う。
QueryPerformanceCounterについて教えてください。 Googleで検索すると、さも当たり前に使うAPIのように紹介されていますが、 MSDNライブラリの注意書にあるとおり、私のPCではサポートされていませんでした。 これが普通に使える方、どんなハードウェアを使っているのか教えてください。
インストールされているハードウェアが高分解能パフォーマンスカウンタをサポートしている場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。
609 :
デフォルトの名無しさん :04/12/14 03:42:14
610 :
デフォルトの名無しさん :04/12/14 08:48:52
サービスのことで質問があります。 メモリマップドファイルでユーザー権限で動いているEXEと通信しようとしてるのですが、 MapOfViewの段階で失敗します。 両方とも通常のアプリなら問題は発生しません。 環境はW2kPro+VS.NET2003、サービスはATLウィザードで作ったものほぼそのままで、 メモリマップドファイルを作成するロジックのみを追加しています。 よろしくお願いします。
>>607 QueryPerformanceCounterがサポートされていない
>>607 の
ハードウェアも教えてほしい。
>>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命令を直接叩いてみます。
デュアルのマシンはプロセッサのアフィニティを設定しないとヤバそうですね。
彼は寝たっぽい
>>612 コーディングが間違ってるって事はない?
Windowを最初から最大化した状態で起動したいのですが、 SW_SHOWMAXIMIZEDを使わずにやる方法は無いでしょうか SW_SHOWMAXIMIZEDだと、初期化前に表示しちゃうもんで… SW_HIDEMAXIMIZEDなんてのがあれば良かったんですが
>>615 初期化してからShowWindowすればいいじゃない
>>616 それが、初期化の際、最大化した状態でのWindowの情報が色々欲しかったりで。
別に初期化前に見せてしまっても良いのですが、どうにも見栄えが悪いんですよね。
>>617 サイズが必要な初期化は WM_SIZE でやればいいのでは?
(WM_SIZE は cx = cy = 0 で呼ばれることあるから注意)
すいません、次のようになっちゃうのがそもそもの悩みでして
初期化は絶対しなければなので初期化する
>初期化後に最大化
>WM_SIZEでまたサイズ変更処理(初期化の処理と一部かぶる)をしなければ
そんなわけで、上手く最大化して起動できれば二度やらずに
済むと思ったのですが、SW_SHOWMAXIMIZED以外には無さそうですね。
>>618 二度やるのが多少気持ちが悪い程度なので、それで行きたいと思います。
cx = cy = 0の件は初耳で全く考慮してなかったので、気をつけます。
616さん、618さん、レスありがとうございました。
>>619 ValidateRectしてからSHOW_MAXMIZEDで誤魔化せない?
フルパスをあるディレクトリを基準とする相対パスに変換するAPI 逆に基準ディレクトリと相対パスからフルパスを生成するAPIはないでしょうか。 例えば、c:\aaa\bbb\ccc.txt(フルパス) と c:\aaa\ddd\(基準) から ..\bbb\ccc.txt(相対パス) とその逆の操作です。
_beginthreadで作成したスレッドの中で、LIBCMT.LIBやMSVCRT.LIBを リンクせずにCのランタイムライブラリを呼び出すのはNGでしょうか。
>>620 レスありがとうございます
試して、さらにすぐ隠したりしてみたのですが、やはり表示されちゃうみたいです。
>>622 > LIBCMT.LIBやMSVCRT.LIBを
> リンクせずにCのランタイムライブラリを呼び出すのは
どうやってやるんだ?
>>621 Shell APIでよければ
PathRelativePathTo()
PathCanonicalize()
とか?
他にもPath〜()調べてごらん
>624 え?普通に呼べましたよ。でもアウトプットウィンドウを見たら、 MSVCRT.LIBはロードされていました。
>>626 リンクせずにって書いたんじゃないのかよ。
で、結局リンクされてたら世話ないわ。
>627 すいません。「リンクせずに」と書いたのは、 プロジェクト→設定→リンク→オブジェクト/ライブラリモジュールに 明示的に指定せずに、ということでした。 「デフォルトライブラリを全て無視」のチェックは付けて なかったのでリンクされたんですかね。
>>627 普通にLIBC.LIBをリンクすりゃできるだろうが。
>>628 否定的な事ばかり言ってすいません。
しかしこのWS_MAXIMIZEがどうにも効かなくて困ったのがそもそもの始まりでした。
検索したところ、MDIの子ウィンドウにのみ意味があるという記述があって
早々に諦めてしまったのですが、なにか私が大ポカをやらかしている気もします。
WS_MAXIMIZEで普通に最大化起動できるよ?みたいなレスを頂ければ幸いです。
>>631 その後表示するときShowWindowに渡してるフラグは?
LIBCMT.LIBリンクしないと_beginthreadは使えないんではなかろか
>>632 なるほどー!そういう事でしたか。
WS_MAXIMIZEの時は、起動時の引数をそのまま渡していました。
WS_MAXIMIZEで作成すれば、ShowWindowの前にちゃんと、最大化されたWindowの情報拾えますね。
お恥ずかしい限りです。しかしすっかり諦めていた所なので本当に嬉しいです。
ありがとうございました。
>>625 ありがとう。それでいけそうdeath。
CPUのパフォーマンスカウンタの件、アドバイスありがとうございます。 諦めて消したコードを書き直してみたら、値を取得することができました。 いったい何が原因だったのか、わからずです。 QueryPerformanceCounterを呼ぶと1000クロックくらい経過してしまうので、 RDTSC命令を直接呼ぶことにしました。これだとオーバーヘッドは60クロックくらいで済みました。 お騒がせしてすみませんでした。
>633 すまん。出直してくる。
VC++でコンソールを扱うクラスを作ろうとしているのですが, コンソールのハンドラルーチンがうまくクラス化できなくて悩んでいます. SetConsoleCtrlHandlerでハンドラを設定するのですが, スタティックな関数しか指定できません. そこで,ウィンドウやスレッドのサブクラス化でやられるようにコンソールクラスの thisを隠しておいてジャンプさせようとしたのですが, SetConsoleHandlerの引数は関数のアドレスとハンドラを追加するか削除するかのブール値の二つ, HandlerRoutineに渡されるのは信号の種類を表すDWORD値一つだけで, このthisを隠しておく場所が見当たらないのです. 良い方法がありましたらお願いします.
>>638 サンクとか。
ATLのCWindowImplとか参考になるかも。
DATETIMEPICKERコントロールからのデータの取得は GetWindowTextで取得できたのですが、 データの設定がSetWindowTextで出来ません 何か固定のデータ形式か専用の別の設定する関数があるのでしょうか? テキストは"2004/12/15"という感じで設定しようとしたのですが、ダメでした
>>638 DWORD 値から、インスタンスのポインタとメンバ関数ポインタの組 or boost::function へのmapを
持てばいいんじゃない?
>>639 すばやいご返事ありがとうございます.
ちょっと調べてみたところ,
サンクはWOW系の16bitのアプリケーションを32bit環境で動かすためのAPIということで
今回の,自分の目的にあうものではないようです.
ATLは結構複雑なもののようですが,かなり参考になりそうなので見てみようと思います.
ザッと見た感じだと,thisをグローバルなマップに登録しておいてそこから引いてくるようなイメージでしょうか.
プログラムは殆ど初心者でして,
コンソールで動くゲーム(NetHackみたいなキャラクタベース)を作ろうとしているのですが,
それだけの事でも大変苦労してしまいます.
勉強の糸口を頂き,ありがとうございました.
>>641 DWORD値とメンバ関数へのポインタのマップもスタティックに持っておいて,
ハンドラルーチンの中からそれを呼ぶということですね.
これから書いてみますが,うまく行きそうです.
皆さん,ありがとうございました.
>>642 そういう意味のサンクではなかったのだが。
指定したthisでメンバ関数を呼ぶような関数を動的に作成するという感じ。
やりたいこと:特定のアプリが起動中か確認したい
環境: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 を利用しています。
構造体は 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が帰ってきます。 長々と申し訳ありませんが、以上で状況はわかって頂けましたでしょうか? 助言をお願いします。
>>646 VB.NETの問題のような気がするが。マーシャリングの基本とか。
・PROCESSENTRY32のszExeFileはStringで宣言。
MarshalAsAttribute属性をつけて、UnmanagedType.ByValTStrとSizeConst=260を指定。
・dwSizeは、Marshal.SizeOf(udtProcessEntry32)で取得した値を設定する。
C#で同様にやった分には問題なかった。
647様、ありがとうございます。出来ました!! 出来たものの全く意味がわかりませんので、勉強してみます。 本当にありがとうございました。
誰か
>>640 もお願いします
ネット上でかなり調べましたが分かりませんでした・・・
DTM_SETSYSTEMTIME送れば?
ものすごく巨大な(1000万行×10フィールド)くらいの CSVファイルを特定のフィールドをキーにソートしろ と言われたら、普通どんな感じでやりますか?
>>651 俺なら数万行程度のブロックに分けてそれぞれをソートしてからマージソートだな。
特定のフィールドと行数のペアを作ってソート。
OracleかSQL鯖に食わせてSQL一発かけてCSV出力
>653 アホ
656 :
デフォルトの名無しさん :04/12/15 21:40:47
>>655 にんにく? いまバカの煮込みつくってます
どーゆー意味?
658 :
デフォルトの名無しさん :04/12/15 21:55:52
>>651 アルゴリズムを選びに行く前に、元データの傾向と対策をまず調べる
>652 やっぱそれですかね。何かいいサンプルとか転がってないですか?
Windowsのインデックスサービスの機能を呼び出すAPIって ありますか?
662 :
デフォルトの名無しさん :04/12/15 23:26:16
CreateEventってどういうときに使うの?
664 :
デフォルトの名無しさん :04/12/15 23:56:55
>>663 マルチスッドレのコードかいてて、スッドレ間の同期とるのに使う
>665 おー、面白そうだな、これ。
>664 どうもです。ボタンクリックとかメニュー選択とかのイベントとは 別物なんですね。
win2000にて。 GetAdaptersInfoを呼び出し取得したIP_ADAPTER_INFOの AdapterNameに対応したFriendlyNameを知るにはどうしたらよいのでしょうか? XPならGetAdaptersAddressesのIP_ADAPTER_ADDRESSESで一撃なのですが、 2000だとiphlpapi.dllにGetAdaptersAddressesが入っていないので・・・ ご存知のかたがいらっしゃいましたら、教えてください。
>>651 std::list<std::vector<std::string> > に格納して std::sort() が楽ちん。
std::sort()じゃなくて、listのメンバのsort() だった。 orz
>>670 潤沢なメモリをお持ちのようで。
#1億個のstring…
>671 >669みたいな何も考えてない奴ってかえって ほほえましいよなw
しかもstd::listのソートって激遅じゃん
VB6.0、Win2000で動かしているプログラムを VB4.0、Win95に置き換えないといけなくなってしまいました。 VB4.0、Win95での開発は経験がなく、 APIの本やネットで調べてみたのですが サブネットマスクとデフォルトゲートウェイとワークグループ名を取得する方法がわかりません。 ご存知の方がいらっしゃれば教えていただけませんでしょうか?
ある端末上で動作するWinサービス(SYSTEM権限で動作)で ワークグループ上のサーバの共有ディレクトリから端末の ローカルディレクトリにファイルをコピーしたいんだけど、 権限の問題で躓いています。ドメインは組んでいません。 サーバのディレクトリに対してアクセス権限があるユーザのIDとパスワードは あるのですが、端末のシステムにそのユーザを作成しないでやりたいです。 ユーザ/パスワードを暗号化してレジストリに置いて使うのはOKです。 【やってみたこと】 1.SYSTEM権限のままコピーしようとすると権限エラーで失敗します。 →サーバ側でNULLセッションとかいうのを許可にすればOK? 2.LogonUser→Impersonateだと、サーバの共有ディレクトリに アクセス権限のあるローカルユーザを作らないといけない。 ユーザを作らないとLOGON32_LOGON_NETWORKでしか成功せず、コピー不可でした。 ※LogonUserのネットワーク版みたいなの無いんでしょうか? 以上です。 動作予定環境はNT/2K/XPです。 宜しくお願いします。
>>674 VB4で開発しないといけない理由は?
Win95でもVB6は動いたと思うが。
#メーカー保証のないOSでの開発はできないと突っぱねるのが正解。
>677 ユーザーに納入しているマシンのうち、 現在その環境で動いているマシンがありまして、 新マシン(Win2000 VB6.0)で新たに追加したプログラムと 同じものを旧マシン(WIn95 VB4.0)でも追加しないといけなくなったのです。 >#メーカー保証のないOSでの開発はできないと突っぱねるのが正解。 個人的にはそうしたいくらいです・・・。
>>678 その場合、旧マシンのリプレイスを薦めるのが営業的にもいいかと。
つーか、VB6で開発したものをWin95で動かせばいいだけじゃないの?
#なんでVB4を使いたいのかが判らん。
680 :
デフォルトの名無しさん :04/12/16 22:21:21
無線LANを使用するアプリを作っているのですが、 ワイアレス接続の構成をアプリ側で制御することってできないんでしょうか? 環境はWindowsXPで、かつadmin権限で動かせます。 やりたいことは 「随時SSIDを検索して、条件にあったものと接続処理」 なのです。 Windows標準のワイヤレス構成が切れるし、 メルコのクライアントマネージャみたいなのもあるからできると思うのですが、 MSDNを漁ってもいまいち見つけ切れませんでした。 日本語、英語での情報とかポインタとか知ってましたら是非教えていただけないでしょうか。 よろしくお願いします。
>677 そういうことはお前には関係ないはずなんだが。
682 :
デフォルトの名無しさん :04/12/16 23:05:47
エディットボックス(エディットコントロール?)に たくさん文字列を入れたいのですがあんまりたくさんの文字列を入れると 表示されなくなってしまいます。 もっとたくさんの文字列を入れるにはどうしたらよいのでしょうか?
>>682 エディットボックスをあきらめてリッチテキストとかにする。
685 :
デフォルトの名無しさん :04/12/16 23:29:11
>>684 ありがとうございます。
やってみます。
686 :
デフォルトの名無しさん :04/12/16 23:30:28
たびたびすみません。 エディットボックスに値を入れて Enterキーを押すと値が反映されるようにしたいのですが Enterキーが降ってきません。 どうしたら取得できるのでしょうか?
>686 KeyPressに来ないの?
688 :
デフォルトの名無しさん :04/12/16 23:36:50
>>687 エディットボックスにフォーカスがあるときも
普通はくるものなのでしょうか?(私の組み方がまずいのかもしれないです。)
689 :
デフォルトの名無しさん :04/12/16 23:40:32
ちなみにメッセージはエディットボックスの 親ウィンドウで捕まえようとしています。 キルフォーカスなどのメッセージは取得できます。
>>689 Enter キーを押すことで、IDOK のボタンが押されたという
メッセージが来ているのかも。
>688 フォームのデフォルトボタンの方に行っちゃってるとか?
>>676 10Mレコードで10フィールドか。
1レコード512バイトとしても、5GB。
まぁメモリが足りたとしても、CPUが追いつかないでしょ。
>692 なんで?
ソートのアルゴリズムのオーダーの問題 クイックソートなんて使った日にゃ、O(n^2)で死ぬよ。 1kレコードならO(n^2)でも1Mの計算量で済むが、 10Mレコードだと 100Tの計算量になっちゃうんだよ。
クイックソートは事実上n・log(n)じゃないの?
>>692 つまりWin「32」APIのスレである以上オンメモリのソートなんてありえない解決策ってことか
あのー、分割してマージソートって結論はとっくに 出てるんですが・・・ メモリなんかでやるわけねーだろ。
ちょっと質問 ホイールの入力状態を取得するAPIってやっぱり無いんでしょうか? GetAsyncKeyStateのような使い方で簡単に取得出来ないかなと思いまして。 メッセージで取得するしか方法は無いのでしょうか? 宜しくお願いします。
699 :
デフォルトの名無しさん :04/12/17 10:46:15
,,,,,,,,,,,,,,,,,,,, /": : : : : : : : \ /-─-,,,_: : : : : : : : :\ / '''-,,,: : : : : : : :i /、 /: : : : : : : : i ________ r-、 ,,,,,,,,,,、 /: : : : : : : : : :i / L_, , 、 \: : : : : : : : :i / メッセージで取得したら /●) (●> |: :__,=-、: / < 負けかなと思ってる l イ '- |:/ tbノノ \ l ,`-=-'\ `l ι';/ \ ニート(24・男性) ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヾ=-' / / ____ヽ::::... / ::::| / ̄ ::::::::::::::l `──'''' :::|
マウスホイールの仕様を考えればおのずと分かるような気がするが・・・
仕様なんてシラネーヨ
分からないので教えていただきたいのですが・・・(^^; 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の宣言が間違っているのでしょうか? 分かる方、是非教えていただけないでしょうか? よろしくお願いします。
>>702 もしかしてVB側で戻り値の型がStringになっている?
>>703 はい。返却値はString宣言しています。
Public Declare Function GetSeiData Lib "Farm.dll" ( _
ByVal i_type As Integer) As String ' 生産者情報取得処理
VBのデバッカでは動作してしまうのです・・・。 (DLL・EXE共最新です)
BSTR
>>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));
}
VBの文字列は長さ(32bit)と文字列の格納されたUnicodeの配列で、 BSTRはunicode配列のアドレス。 VBのデバッガで動作するのは、デバッガが終端のNULLを見ているか、 たまたまと思われ。
>>707 回答ありがとうございます!!
早速試してみます!!
どうもでした。
結果はまた書き込みます。
>>708 VBの文字列 == BSTR
文字列の長さを持っているのがBSTRの条件だよ。
>>707-708 本当にありがとうございました!!
動きました!!
助かりました!!
これで作業を進める事が出来ます。
若輩者ではありますが、今後もよろしくお願いします。
>>710 うん。わかってる。んなもんで、
>>706 を書いた。
(そんときは時間がなかったので、一言だけ書いたけど)
BSTRなのにstrlenでいいのけ?
714 :
デフォルトの名無しさん :04/12/17 15:22:42
return A2BSTR(p); でもよかったとおもうべな。
>>713 VBはDLL関数に文字列を渡したり返したりするときに勝手にShift JISとUnicode間の変換をしてくれるから平気。
>>713 だめだよね。
全角文字ばかりだからたまたま動いている、と想像する。
(^( さすがVB )^)
719 :
デフォルトの名無しさん :04/12/17 18:24:20
すみませんDLLにバージョン情報付けたいのですが DLLリソースつかえませんよね? どうすれば・・・ おねがいします
ごめん・ほうとうにごめん ちょっと子一時間説教されてきます なぜかリソース使えないつもりでした
722 :
デフォルトの名無しさん :04/12/17 18:35:50
APIの質問じゃないと思うんですけど コモンダイアログのGetOpenFileNameを呼び出すと 画面の左上にウインドウが表示されてしまいます・・ これを画面中央に表示させたいのですが OPENFILENAMEに何か値を入れると直るのでしょうか? 環境はVC7でMFCは使ってません
hwndOwnerにハンドルをセットするとそのウィンドウの左上あたりに表示されるみたい
725 :
デフォルトの名無しさん :04/12/17 20:44:47
エディットコントロールのフォントを変えたのですが、カーソルの大きさがそのままで変わりません。 デフォルトの文字サイズより小さくしたのですが、エディットコントロールの高さも変わりません。 高さが変わらないのはカーソルのせいではないかと思うんですけど・・・。 解決方法をお願いします。 エディットコントロールのフォント変更は、WM_CTLCOLOREDITが来たときに wParamからhdcを取得して、あらかじめ用意しておいてフォントをSelectObjectで選択しています。
サブクラス化してみたらどう?
>>726 ありがとうございます。
やってみます。
WM_SETFONT
>>728 おっと、
ありがとうございます。
調べてみます。
WM_SETFONTでできました。 ありがとうございました。
731 :
デフォルトの名無しさん :04/12/18 12:48:51
リストボックスの選択されている項目の文字列を取得するにはどうしたらいいのでしょうか?
MSDN眺めれば5分とかからずわかりそうな事を・・・
733 :
デフォルトの名無しさん :04/12/18 13:04:09
OSだけ再起動したいのですが、どうしたらよいでしょうか (昔のOSでSHIFT押しながら再起動をしたときのように)?
>>732 MSDNは異常に重いうえに分かりにくいのですが・・・。
一応見てみます。
736 :
731 :04/12/18 13:32:02
すいません、やっぱりMSDNではちょっと無理があります。 どこを調べていいのか分からない上に、検索文字列に日本語を使えないのは厳しいです。 もうちょっとまともなサイトを紹介していただけませんでしょうか?
738 :
デフォルトの名無しさん :04/12/18 13:41:24
>>737 リストボックスです。
>>738 ありがとうございます!
LB_GETTEXTでできました!
740 :
デフォルトの名無しさん :04/12/18 16:07:15
リッチエディットに画像を表示する方法はありますか? Wordのように、改行されると画像も下に移動するようにしたいのです。 Borland C++ Compilerを使用しています。
MFCとSDKって出来る事が違うのですか? 今はSDKしか勉強していないのですが、MFCも扱えた方がいいですか?
>>743 そうなのか?
俺はそういうのをどこかのサイトで読んでから、それを信じてたがw
適材適所 MFCや他のライブラリを使えば短時間で簡単に仕上げられる仕事を SDKレベルで車輪の再開発している同じフロアのやつを見ると腹が立つ。 もちろんMFCが想定しないようなアプリケーションスタイルとか、細かい ケアが必要なものはSDKレベルでやったほうが良い場合も多い。
746 :
デフォルトの名無しさん :04/12/18 21:40:05
>>742 CRectTrackerなんぞ自分で作るのか?
細かいケアが必要なものも最近じゃATL/WTLで作ってるな、俺は。 一度楽するとSDKで作る気起きん。
ライブラリの限界にぶちあたるとそれを回避する方法を考えたり 最悪パッチ作ったりと大変だけど、基本的には圧倒的にライブラリ 使ったほうが生産的だよな
他人のソース見たりしないんだろうか? MFCも知らないと損だろ
>>749 MFCは使ったことないけどMSDN見れば(特にAPIのラッパ部分は)大体理解できるから問題ない。
MFCを知らずにソースだけ追いかけても理解できないはずだけど
VC++についてるウィザードが使える、というだけでもMFCを使う価値はあると思う。 ただ、MFCが優れているかというと、うーん・・・ VBのC++版っていう感じがして、なんかダサいな。 Win32直叩きでも作ったことあるけど面倒だったのでMFC使ってます。
VCTK+WTLがなんか好きだな。タダだし
>>753 WTLってATL必須じゃないの?
んでATLは有料と。
英語が苦手な人は、bccが良いかと。 コンパイラとしての性能は比較にならんほどvctkだけど。
VCって1万円くらいでしょ? なんでVCtoolkitに手を出すの?
学生はいいよな
MSはボリすぎ
コンパイラで数万円ならそんなもんじゃね? bccとかみたいに放置状態ならフリーでもいいかも。
MFCは基本的にはなんにもしてくれないだろ。 アレ使って、なんか楽になるのか?
使いづらいSDKのラッパーという印象しかない。
>762 君はそれでいいんじゃないの?
765 :
デフォルトの名無しさん :04/12/19 07:37:30
APIをフックすることは可能ですか? なにかのAPIをコールしたときに自分の関数を呼ばせ、 そこで処理をしてから本物にバトンタッチするようなことを考えてるんですが。
>>758 ごめん。
VS.NET 2002が出て、VC6が安売りされてる時の値段だった。
>765 できる。
>764 あなたの経験年数は?ちなみにわたしは1年。
>665 面白い本を紹介してくださってありがとうございます。 さっそく注文して届いた本をぱらぱらめくって見ているのですが、 年末年始はこの本にどっぷりつかりそうです。
>>768 Win32APIなら7年
MFCなら5年
>>770 (`Д´ )9m経歴詐称で訴えてやる!!
俺なんか Win32API:1年 MFC:2年 まだまだだな・・
>>772 経験年数なんて自慢するもんじゃない。
どんなに年月かけたって進歩の無い奴は無いまま。
3年もたって使いこなせないのはもう駄目だと思う。
一年あれば充分だろ。
半年あれば十分だろ
一久遠あれば十分だろ。
(・∀・)ニヤニヤ
エディットコントロールにスクロールバーが付いている時、 WM_MOUSEWHEEL を、そのスクロールバーに感知させないようにするには どうしたらいいのでしょうか? プロシージャのサブクラス化をしているつもりなのですが、 まず最初にスクロールバーが感知して、それから、 サブクラス化したプロシージャに来ているようなのです… WM_MOUSEWHEEL を、自分だけでイベントハンドリングしたいのです スクロールバーがあっても、感知させたくないのです
>>774 1年じゃ無理では無いにしろ難しいと思うな。
結構くる注文で
「flashやVCみたいなのにしてくれ(ドッキングツールバーのことだな)」とか
「IEのお気に入りと同じような機能を入れてくれ」
ってのがあるけどあーゆーのはホイホイ作れるまでなるのは時間かかるだろ。
まあ、Win32APIだけの話ではね。
ライブラリ使えば数分でできる仕事を Win32APIだけで時間をかけて作る意味があるのか? しかも一年以上の修行期間が必要だなんて・・・
技術屋の自慰行為
C++知らなきゃしょうがない。 手も足もだせないだろう。
>>780 そういうライブラリの存在を知る時間も含めて
一年でできるようになるのかと。
モノによるのでは。 数を売るパッケージで、頻繁に使うようなものならSDKで作りこむのもよい。。 短納期で開発効率重視ならライブラリに頼って少しでも工数が稼げれば。
短納期で開発効率重視であることの方が多いよなぁ・・・
ahoか? 分かってたら答えてるわ
Delスレで質問したら、こちらにとレスがあったので、質問させてください。 ドライブ名(Cとか)からハードウェア名を取得するには、どのように したらよいのでしょうか? ドライブを右クリックして、プロパティを開き、ハードウェアタブに 表示されるハードウェア名を取得したいのですが。
>792 仮にそうだとして何か問題でも?
795 :
デフォルトの名無しさん :04/12/19 23:33:35
もしかして、C++ が使えるんだと言う自慢なの ? (藁
どれが?
エディットコントロールを作成した時点でキャレットを表示したいのですがどうすればいいか教えてください。 キャレット作成して表示してもそのキャレットは移動できません。 なのでエディットコントロールをマウスでクリックしたときに初めて表示されるキャレットを最初から表示したいのです。お願いします
>>799 ありがとうございますありがとうございますありがとうございます
下のようなプログラムを書いたのですがウインドウが、一番手前に来ません。 SetForegroundWindow( hWnd )ではうまくいったのですが・・・、 どうしてだか気になるので教えてください。 if( GetForegroundWindow() != hWnd ){ SetWindowPos( hWnd , HWND_TOP , 0 , 0 , 0 , 0 , SWP_NOSIZE | SWP_NOMOVE ); }
>>791 ハードウェアタブに表示されるのは全ドライブの一覧で、
ドライブレターとの関連はないよ。たまたま一番上に表示されてフォーカスが合ってるだけだったりする。
ドライブのメーカーや型番を取得するのは、
"\\\\.\\c:"をCreateFileで開いて、
DeviceIoControl()でIOCTL_STORAGE_QUERY_PROPERTYでSTORAGE_DEVICE_DESCRIPTORを取得すればいけそうな希ガス。
サンプルやヘッダはDDKにあります。
ごめん、ヘッダはDDKにあるけど、参考になるサンプルはないみたい。 たまたま自分がやろうとしていたことに近いものだけ、サンプルがあったので、他のもあると思い込んでました。
たとえば、こんな感じ。 元々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 ; } }
>>750 LoadImage でLR_LOADMAP3DCOLORSを指定しても正しく色変換がなされないケースへの
workaround とか、MFCにもいろいろ役にたつコードが含まれてるわけで、一通りソース読んで
おくくらいのことはした方がいいと思うけど・・・
スレをまとめてFAQ作るような勤勉な輩はいないものか。
マウスカーソルが自分のウインドウ上から出た瞬間は どうやって検出すればいいですか
キャプチャして移動するたびに座標比較する
812 :
デフォルトの名無しさん :04/12/20 19:21:35
TCP/IPのIPアドレスなどのネットワーク設定(LAN設定)の切り替え(切り換え) をワンタッチで簡単にできるTCP/IP設定変更ツールを作りたいのですが どんなAPIを使えばよろしいでしょうか? 環境はWindows2000,XPを考えています
>813 リンクありがとうございます。
815 :
デフォルトの名無しさん :04/12/20 20:07:37
音楽を再生するMMControlについて質問です。 MIDIデータを再生し、一時停止(Pause)した後、再びその位置から再生すると、何故か音色が変わってしまいます。 使った事のある方なら殆どの方がきっと「あれ?」と思うところだと思います。 どうもMMControlでは、頭から再生しようとした場合しか音色設定を読み込んでない気がするのですが、 何か解決方法は無いでしょうか。
すいません、MMControl、つまりマルチメディアMCIコントロールでのMIDI再生の事です。
817 :
デフォルトの名無しさん :04/12/20 20:16:43
ネットワークドライブの共有元フォルダ名から共有名を知る方法はありませんか? コンピュータ名:SERVER 共有フォルダ:E:\Data だと共有元フォルダ名は"Server:e:\Data"になりますよね? それを別なコンピュータ上でXドライブとして設定してたとすると、 "Server:e:\Data\Tmp"を"X:\Tmp"にへんかんしたいのですが。 環境:windows2000 よろしくお願いします。
WNetGetConnectionで一致する物を探す
>770 7年もコーディングやってるなんて化石みたいな奴だな。 一生次のステップに進めなそう。
821 :
817 :04/12/20 23:25:31
>>818 さんありがとうございます。
試してみたのですが、
期待する文字列"Server:e:\Data\Tmp"にたいして
"Server:\Data\Tmp"しか取得できませんでした。
参照先の完全なローカルパスが取得したいのですが無理でしょうか?
>>821 参照先のドライブ名は得られないと思うけど。
AddIpaddressで仮想的にIPを追加できることはわかりました できればローカルエリア接続のプロパティで設定したのと同じ設定 (再起動しても設定が消えない)方法でやりたいのですが 調べたところネットワークドライバ(NDIS?)でプログラムすることに なるのでしょうか? と、いってもデバイスドライバのプログラムなんて想像がつかない状態です
824 :
デフォルトの名無しさん :04/12/20 23:46:57
何この過ぎ去ったレスほじくりかえしてるスレ
>>820 専門学校で3年、会社で4年だけど?
まともなWindowsのアプリ組める奴ってめずらしいだろ?
絵に描いたような胃の中の蛙でちゅね。
VC++ Version2003ってClassWizardってないのか? VC++6だと、メニュー→表示→ClassWizardってな感じでいけたけども。
>>826 自分がまともなものを組めないからって、そんなことを言っちゃいけないよ。
まとも、というのがどの程度のレベルかだね。 一見まともそうでも、画面のデザインやDPIを変更すると破綻するアプリは多いよ。
うえみてくらすなしたみてくらせ
>>832 作ってる本人と環境が違うと問題がでるのはどうしようもないだろ
本当におかしければユーザーから指摘されて直すだろうし
もしかして色盲とか弱視とかで非常に特殊な設定してる人ですか?
>824 あわれよのう
>>834 どうしょもなくないよ。まともに作ってれば問題は起きない。
たまたま自分の環境でうまく動いてるだけというのは、まともとは言わない。
決め打ちでC:\WINNT\SYSTEM32にインストールしたり、
一時ファイルのために C:\ランダムな数字 なフォルダを作ったりするアプリを、まともと言いますか?
>>832 > DPIを変更すると破綻
それってディスプレイドライバの問題じゃん。
まあ、なんでもいいけど。 数年来Win32の経験つんできているってことは需要がありつづけるってことでしょ。 ええなあ。
840 :
デフォルトの名無しさん :04/12/21 12:08:18
Windowsのファイルシステムにファイル(やディレクトリ) を一意に識別する固有の 識別子のようなものはないですか? あればそれを取得や検索するAPIも教えていただけませんか?
>>840 パス名とファイル名を繋げると一意な識別子になります!
Σ(゚Д゚;)ハッ
843 :
840 :04/12/21 12:35:55
>>841 一度作成されたら削除されるまでリネームしようが移動しようが変わらないものは
ないのですか?
無いよ
Σ(゚Д゚;)ハッ
実行した瞬間MS-DOSを起動させるには、どのようにすればいいですか?
洗ってきました。さぁ、教えてください。
NT系だとMS-DOSは入ってないよな
Σ(゚Д゚;)ハッ
>>843 msvcrt の struct stat の st_dev と st_ino はどういう意味の値なんだろうね?
UNIX だとこの2つの値のペアを(パス名非依存の)識別子と考えられるんだけど。
LoadLibrayExで LOAD_LIBRARY_AS_DATAFILEを指定してDLLを読み込んだとき その読み込んだDLLをそのまま別のファイルに書き出すにはどうすればよいのでしょうか。
>>852 LoadLibrayExで指定したファイル名を使ってCopyFile
>>851 ありがとうございます、さっそく調べてみたのですがMSDNライブラリには
>st_ino は、FAT、HPFS、または NTFS の各ファイル システムでは意味を持ちません。
との記述が…
残念です。もう少し調べてみたいと思います。
>>854 ありゃ、残念。
で、Cygwin で st_ino がどうなっているか調べてみると、
GetFileInformationByHandle() を使っていて、この API で得られる
nFileIndexHigh と nFileIndexLow がそれっぽいような違うような値ら
しい。
| 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. 違うよなあ、こりゃ。
OS上ではどのように処理しているのですかね? まさか、リネームや移動しているたびに変更情報は作りませんよね? フォルダの移動なんかやったらえらいことになりそう… ファイルシステムに詳しい方はいませんか? スレ違いですかね?
>>840 だから無いからOSは何も処理してないよ。
>>838 そういう話ではない。
画面レイアウトがピクセル単位で決められているのにフォントだけポイ
ント単位で作成してたり、メニューのフォントが大きくなってメニュー
バーが2段表示になるとクライアント領域が狭くなって一部の操作がで
きなくなる、とかのアプリケーション。
MD5
オブジェクト識別子ってのがなかったっけ? Distributed Link Tracking Serverが使ってる奴
>>840 GetFileInformationByHandle
ただし、誰かが握ってないとダメ。
>850,843 ない >857 >リネームや移動しているたびに変更情報は作りませんよね? >フォルダの移動なんかやったらえらいことになりそう… なにが大変なのかわからんけど FATの場合、リネームや移動ではFATエントリーは変化しない(当然データの移動も発生しない) 単にディレクトリエントリの中身が書き換えられるだけだからそれほど大変じゃない ただ、ディレクトリエントリのどこに書き込まれるかは移動するたびに変わる コピーすると実際にデータが入るクラスタが変わるのでFATエントリーも変化
プログラムでマウスの自動処理をしたいのですが、SendMessageで 特定のハンドルに送るのではなく、画面のx,yをクリックした事にする事は 出来ますでしょうか? 全ての窓を取得してx,yの位置の最前面にあるハンドルに送ったりするの ではなく、マウス操作をそのまま再現する様な・・・
>>865 使ったこと無いけどmouse_event
ところでなんでこのAPIは小文字なんだろうな
>>866 クスコ
絶対座標の仕様が回りくどい・・・
>>864 そうですか、説明ありがとうございます。元々やりたかったことが特定フォルダをReadDirectoryChangesw
で監視して、ファイルの情報をデータベース二キロ浮くしたかったのです。
そこでファイル固有の情報を主キーにしようかなと思っていたもので。
実際に作ってみたのですが(とりあえずフルパスを主キーにした)、このAPIって結構ターゲットの変更を追
尾しきれないのですね。私の作り方が悪いのでしょうが。
メインスレッドから監視スレッドを立ち上げ、変更がある都度書き込みスレッドを作成してデータベースに
アクセスしています。ファイルの追加やリネームニューでデータを追加し、削除やリネームオールドでデー
タを削除しているのですが、瞬間的に作られるテンプファイルなどが新規ファイルとして残ったり、多くの
ファイルを同時に操作すると削除したファイルなどがデータベースに残ってしまいます。
基本的なアプローチが間違っているかともおもいますが。このよう場合の常套手段など在るのでしょうか?
他スレ誘導や参考サイトなど教えていただけると助かります。
>変更がある都度書き込みスレッドを作成して 変更が立て続けに起きたときに処理が並行して正常に記録できなくなってる悪寒。
>>863 レスしなくてすみません。まだ未解決です。
APIには慣れていないもので、色々と調べています。
今回、ハードウェア名(?)を調べたいのは、USB接続された
リムーバブルディスクですが、質問ばかりだとアレなので、
まず
>>804 の内容を理解しようと頑張ってみます。
参考になるサイトがありましたら教えて頂けると助かります。
>>865 vncサーバのソースとか読んでみたらどうでしょう。
vncプロトコルは異様にシンプルなので、特に問題なければサーバを
そのまま使うのも簡便でしょう。
名前見てるだけでチンチン立ってくるよ。
873 :
デフォルトの名無しさん :04/12/22 16:44:40
システム警告音を鳴らしたまま MessageBox を表示して それを閉じるまで Beep 鳴りっ放し、ってのは出来ないでしょうか? (サウンドカードは使えないとして)
別スレッドで鳴らしまくれ!!! でもそれ激しくウザいな
でもそういう要求は多い罠。 でも納品してからやっぱり五月蝿いと言われる罠。
んで、ボリュームを下げるよう言われるのな。
やはり別スレッドになりますか… 取り敢えず別スレッドの無限ループ内で Beep() を呼ぶ、というやり方で試してみました。 …継続時間として指定した時間が経過するまでは TerminateThread でもすぐに止まらないっすね。 継続時間1秒として、「音が止まるまで少し遅れる事がある」 というところで納得してもらうことにします。 ありがとうございました。
すいません InvalidateRectで全画面描画すると 凄いチカチカするんですが どうにかできないでしょうか? 以前使ってた言語ではこの程度でチカチカはしなかったんですが
そうですか
WM_ERASEBKGNDを適切に処理する。
やはりもう少し勉強してから質問する事にします 失礼しました
>>870 USBのHDDでも大丈夫でしたよ。
HDDがUSBかどうかは、STORAGE_DEVICE_DESCRIPTORのBusTypeでわかります。
"\\\\.\\c:" というのはCドライブの場合で、Dドライブなら "\\\\.\\d:" です。
あと、C言語では\を直接書くことができないので、\を\\で書いています。
つまり、CreateFileに渡すのは実際には、"\\.\c:"です。
\ではまってたら、ごめんなさいね・・・。
Win2000より古いWindowsで、HWND_MESSAGEを使ったメッセージ専用ウィンドウと 同等の機能を実現することって可能ですか?
識別できるようなクラス名もウィンドウ名も持たないダイアログがあるのですが こういったダイアログのハンドルをFindWindowで取得するにはどうすればいいのでしょうか?
何が異なるのかをとりあえず書け
887 :
デフォルトの名無しさん :04/12/23 01:03:56
c++スレでスレ違いといわれたのでこちらであっているのか分かりませんが。。 VC++.net キーボードとマウスからの入力はWM_KEYDOWNなどを受け取るので分かりますが、 ゲームのコントローラーからの情報はどうやれば分かるのでしょうか。 spy++でやってもコントローラーからの情報は一切受け付けません(出力を全て選択していますが該当するものは元々なさそう)。 コントロールパネルのゲームコントローラーは正常に受け付けています。 ゲームのコントローラーは[PS2のコントローラー]-[コンバーター(USB接続)]-[PC]と繋いでいます。
大きなファイル(数GB)の真ん中に、数Byteのデータを挿入したいんです。 真ん中にシークして、書き込む領域のデータをバッファに待避して、 書き込みたいデータを書き込み、次々とずらして最後まで繰り返していく、 という方法でできるにはできますが、 ファイルが大きいので入出力処理に時間がかかってしまいます。 できるだけディスクへの入出力が少なくなるようにするには、 どうするのがいいのでしょうか?
>>891 どうしようもない。データ構造を工夫するとか。
たとえばビデオデータの例だとQuickTime なんかは、実際のファイル内での順序と
再生される時系列とが一致しなくても良いデータ構造を使って、編集時はファイルを
大きく変更しなくても挿入やカットができるようにしている。必要なら最後に整列する。
>>892 ,893
すでに作られているファイルを加工したいので、
自分でデータ構造を定義できないし、データベースも使えないんです。
メモリマップトファイルを使って…、とも考えたんですが、
結局、書き込みが発生してしまうんですよね。
ファイルシステムを直接いじるってのはどうだ? 断片化するだろうけど‥‥
>>887 RegisterRawInputDevicesを呼び出すとWM_INPUTを受け取れるようになる。
普通はDirectInputだろうけど。
>>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スレに行って質問してください
あげちた。スマソ
了解です
>>883 CreateFileはネット上にサンプルもあったので、なんとか
できました。
今、DeviceIoControlについて調べています。
こちらは、Delphiでのサンプルがネット上にも少ないので、
苦戦していますが、がんばってみます。
質問なのですが OSはXP Visual.net C++ を使用しています マルチメディアタイマーを使用するときは プロジェクトにwinmm.libを参加させます と書いてあるのですが これはどのようにやればいいのでしょうか? 教えて下さい
903 :
デフォルトの名無しさん :04/12/23 17:40:01
>>902 ソリューションビューからプロジェクトアイコンを右クリックし [プロパティ]
[構成プロパティ] - [リンカ] - [入力] - [追加の依存ファイル] に winmm.lib
質問なのですが >プロジェクトにwinmm.libを参加させます などという莫迦な言い回しは どこに記述されているのでしょうか? 笑いたいので教えて下さい
>>902 #pragma comment(lib, "winmm.lib")
907 :
デフォルトの名無しさん :04/12/24 00:20:19
WM_KEYDOWNでVK_TABやVK_LEFTのときに SHIFTもいっしょにおされていたかどうか 調べるにはどうするんでしょうか
GetKeyStateなど
909 :
デフォルトの名無しさん :04/12/24 00:35:21
おばかな質問でごめんなさい。 用語をあまり知らないので、ググり方もよく分かりません。 やろうとしていることが、もしかしたらAPIというものを使えば出来るかもしれない ということを知るまでに、かなりの時間を費やしたのアホです。 使えるのはAccessVBAのみ 最小化されてタスクバーにおさまっちゃった状態のアプリケーションを、 表舞台に引っ張り出す方法を教えてください
Alt とTabを押す
912 :
デフォルトの名無しさん :04/12/24 00:55:06
>>910 すみません
ググルための語彙力の限界というか・・・
アプリケーション アクティブ化 API とかでググッたら、それっぽい自作関数が紹介されてたんですけど、
これが使えるのは、最前面にあるAccessのすぐ真裏でひそかに生きてる状態だけでした。
(こんな言い方で分かっていただけますか)
最小化されてタスクバーにおさまっちゃった状態では通用しなかったんです。
>>911 sendkeys "%{Tab}"
でもどうにかいけることはいけるんですけど、
できれば、タスクバーにおさまっているものの中からアプリケーションを指定して、引っぱり出したいな
と。(いくつもあると、何が出てくるか分からないので)
Alt とTabを押す
ゴメン。。。
順を追って読め
XPの「アクティブでないインジケータを隠す」の個別アイコン設定を 変更&適用する方法、どなたかご存じでしょうか。 どうしても設定が保存されないアイコン(サービス類)を、スタートアップ で変更&適用出来たらなと思っているのですが・・・
>>917 ここらへん。詳しいことは知らない
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify
DOS用プログラムをコマンドプロンプトを表示しないで 実行しつつ、そのプログラムの吐いた標準出力の結果を 得るにはどうしたら良いのでしょうか?
>>905 「させます」取ってみた。あぁ、噂の「猫」か。
HTML も酷ぇなw
>>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);
}
HANDLE hReadm hWrite;の1行を書き忘れた。書き足しておけ。
命令するな!
>>923 (°Д°)ハァ?
お前はコマンドプロンプトを絶対に使わないんだな!!
>>921 なるほど、パイプですか。
パイプは使った事無かったので盲点でした。
ソースまで書いて貰いありがとうございました。
自分のスレッドのIDを後から知りたいのですが、 よろしければ取得APIを教えて頂けないでしょうか。
GetCurrentThreadId
検索ワードを変えたらあっさりヒット、失礼しました GetWindowThreadProcessId
>>927 重ね重ねすいません、そっちの方が良さそうですね
ありがとうございました
930 :
デフォルトの名無しさん :04/12/25 03:31:08
spawn しまくってる香具師はパイプカットしろ
932 :
デフォルトの名無しさん :04/12/25 10:17:27
BST_CHECKEDのBSTは何の略?
ボケ死ねタコ
>>931 参考サイトだけ見せられても…
実際のコードは?
935 :
932 :04/12/25 10:32:26
自己れす、ボタンステートですた。
934> 今はまだ設計開始中のため考慮している段階です。 ファイルの書込み更新時点でファイルをリードして内部 処理するのが目的なのですが、何か良い方法はあるので しょうか?
>>936 単に不具合なんじゃないかって、話しだと思われ
>>936 喪前がうまくいかないってコードを見せればいいんだよ。
取りあえずどういうタイミングで通知が来るのか、 書き込んだりフラッシュしたりちょっと待ってみたりしてしっかりチェックしてみな。
940 :
デフォルトの名無しさん :04/12/25 13:16:29
プロセスごとに使用するネットワークのバンド幅を制限したいのですが、 このようなことは Win API で可能でしょうか?
プロセスごとに制御できるかどうかはしらんが QoSで調べてみれば
>>940 Windows2000以降ならできると思う。
NEGiESとか、フリーウェアでやってるので、マイクロソフトとNDA結ばなきゃ使えないAPIなんてことはなさそう。
>マイクロソフトとNDA結ばなきゃ使えないAPI そんなものはありません。
あります
>944 表向きだけな。
表向きってどういうこと?
>946 いや、むしろ 表向きってどういうこと?ってどういうこと? って聞き返したいんだけど。
って聞き返したいってどういうこと?
>>944 表向きでもいいんだけど、例えばどんなやつ?
OTLSとか。
BITMAPV4HEADER / BITMAPV5HEADER の後ろのほうのメンバの使い道を教えてください。 LOGCOLORSPACE 構造体によく似ているので関係あるんだと思うんですが、ICM の使い方もよくわかりません。
>950 どこでその名を知った?場合によってはその書き込みはまずいぞ。
>953 お前、契約書ちゃんと読めよ・・・信じられん。 うちの社員だったらクビ飛んでるぞ。
文字列検索できる関数とかってありますか?教えてください。お願いします
961 :
デフォルトの名無しさん :04/12/26 15:02:31
strstr
>958 経験ないと分からない思うが、>953のようにリンクを 貼る行為は完全にNG。契約違反になるから説明できる とこがほとんどないんだけど、当事者になったときに 分かるよ。とりあえず>953はやばい。
>>962 「OTLS」「Microsoft」でググるとトップに出てくるURLなんだけど、
それが機密情報名わけ?ww
もう、おばかさん多いな...
やばい情報なら誰にでも見れるところに置くのはまずいと思うが…
どのみちURL出すとまずいような場合は最低でもbasic認証しておかないと法的根拠はないんじゃないか?
君以外は誰も限定なんてしてないよ。
おまいら釣られすぎだぞ!
>970 そう。962は俺が書いたんだけど、君だけが正解。
>962=>970 自演決定。
>964 契約書は読んだ?したっぱPGはそんなの気にしねーのか。 機密とかまったく関係ないよ。
>>974 953の書き込みがやばいやばいって言うから、
950のOTLSって単語に色つけてぐぐれば
契約云々関係ない第三者でもすぐ分かるぞってことでは。
ネタにまじレスしてる場合か? もうすぐ正月だぞ
>>977 もちつき、忘れるなよ
/\⌒ヽペタン
/ /⌒)ノ ペタン
∧_∧ \ (( ∧_∧
(; ´Д`))' ))(・∀・ ;)
/ ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O ノ ) ̄ ̄ ̄()__ )
)_)_) (;;;;;;;;;;;;;;;;;;;)(_(
みんな、コード書いてる場合じゃないぞ! |___|⌒ヽペタン .∩ || ⌒)ノペタン∩ | | /二つ ((.⊂ニヽ| | (,, ゚)| )) (゚Д゚,,) ノ つ ( ⌒ヽ ⊂,,ヽ O ノ ) ̄ ̄ ̄((_ ( )O (/ (/ (;;;;;;;;;;;;;;;;;;;)∪ヽ)
ネットにはいつもいるMr.守秘義務君が大騒ぎしただけだろ
981 :
デフォルトの名無しさん :04/12/27 02:51:10
ListViewCtrlのソートに関する質問です。 ソートを実行するコールバック関数で返した結果はすぐにリストに反映されるのでしょうか? リストアイテムのユーザデータにそのアイテムが登録された時のインデックス番号が格納されてあり、 コールバックに渡される2つのユーザデータから該当するカラムのテキストを取得して比較を行ってます。 こういう実装方法だとコールバックが返した結果がすぐにリストに反映されてしまうと 比較を行うたびに予め設定してあったインデックス番号が狂ってしまいますよね? 正しくソートを実行するためにはソートを実行する前にソートを行うテキストを ユーザデータとして設定するような事を行わなくてはならないのでしょうか? コールバック内でListView_FindItemするんでしょうかね。 みなさんはどう実装してますか?
意図ようがわからんが、 最初にやることはデバッガで追う事。 まあ回答してやってもいいが、 例えば俺がサイコロ振って適当に「反映されます」と回答したとして、 それを信用するかね? まあするんだろうね。 確率は1/2だから悪くはないわな。 というわけで、 最初のは「反映されません」 2番目は「行う必要はありません」 つーか、なんのためのコールバックかよく考えてみ? 最後のは「実装したことはありません」 これでどうだ
1こ抜けてたが >狂ってしまいますよね? に対しては、 「はいそうですね。」 以上だ。
知らないなら何も書かなくていいんですよ
残念ながら1/2の確率で知ってるんだが
ボキャブラリが許せばサイコロの面数によって微妙な回答も可能だね
では100面ダイスをどうぞ
OTLSってネタかと思ったよ。 だって、OTL ですよ。
>>982 ええとですねデバッグして検証はしたんです。
コールバック内で取得したテキストとソートを実行する前に予め設定したテキストを比較してみた所
まるっきり一致しませんでした。
で、ネットでいろいろなサンプルを漁ってたんですがその中に前者の方法でテキストを取得している
サンプルが幾つかあったので混乱したんです。
何らかのフラグの設定で反映されたりされなかったりするんかなとか思ったりもしたので
経験者の意見を聞きたかったわけです。
いろいろ試した結果最終的にはユーザデータをキーにListView_FindItemで検索したインデックス番号で
テキストを取得するようにしました。効率悪そうですが。
方法わかんないならソートをListViewの外でやって 後で一気にViewに反映した方が後々良いと思うんだが 目的がListViewのエキスパートになりたいならともかく
>>990 その方法は効率良さそうですね。盲点でした。
何が何でも中でソートする必要なんてないですもんね。
助言ありがとうございました。
>>982 そういえばお礼言ってませんでした。
大変親切な助言ありがとうございました。
>991 >その方法は効率良さそうですね。盲点でした。 えー
文字列検索できるAPIとかってありますか?教えてください。お願いします
>>989 私は登録順をユーザデータとして設定しているよ。
ソートのときはそれを利用している。
高々1000件くらいのリストならそれで充分ことが足りている。
↓次スレよろしく。 ちなみに、plalaは建てられませんでした。orz
999
1000 :
デフォルトの名無しさん :04/12/27 10:26:45
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。