■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build49
501 名前:デフォルトの名無しさん :2007/01/31(水) 15:51:21
サトエリかよw

502 名前:デフォルトの名無しさん :2007/01/31(水) 16:50:42

ReadDirectoryChangesW を使って以下のフラグ設定をし、
IOCPを使って非同期でディレクトリの監視を行っています。

FILE_NOTIFY_CHANGE_FILE_NAME
FILE_NOTIFY_CHANGE_LAST_WRITE
FILE_NOTIFY_CHANGE_SIZE

処理としては以下の流れです。

1. 監視するディレクトリのとスレッド・IOCPと関連付け
2. ReadDirectoryChangesW でディレクトリの監視を開始
3. スレッドで変更を検知したら、処理を行って、
  スレッド内部で再び ReadDirectoryChangesW を呼び出す

質問なのですが、監視対象のディレクトリでファイルが1つだけ変更されたとき、
「3」の部分が2回実行されてしまいます。(1階の変更で変更通知が2回来る)

これはなぜなのでしょうか?
また、通知が2回来たとき、1回目を無視する方法はありますか?
よろしくお願いします


503 名前:デフォルトの名無しさん :2007/01/31(水) 17:55:28
フラグの処理まちがってんじゃね?としか

504 名前:デフォルトの名無しさん :2007/01/31(水) 18:39:06
>>499
例外というのは単なるエラーではない。
状況や結果を表す為にライブラリ等が敢えて発生させるもの。
「例外が発生した=問題がある」ではない。

505 名前:デフォルトの名無しさん :2007/01/31(水) 20:33:12
ウィンドウの左上のアイコンを非表示にしたいんですけどどうしたらいいですか

506 名前:デフォルトの名無しさん :2007/01/31(水) 22:55:19
透明なアイコン作っていれとけ。

507 名前:デフォルトの名無しさん :2007/01/31(水) 23:04:10
>502
とりあえず変更バッファにでも保持しといて、しばらくしてから実行すれば。

508 名前:デフォルトの名無しさん :2007/01/31(水) 23:41:22
システムメニュー外すとか

509 名前:デフォルトの名無しさん :2007/02/01(木) 00:20:18
>>502
非同期の待機処理が誤っているんじゃ?
結果、FILE_NOTIFY_CHANGE_SIZEの完了までに、
処理が2回走ってんじゃね?

510 名前:sage :2007/02/01(木) 00:27:28
タスクバーのボタンを消すのってどうすればいいのでしょ?
WS_EX_APPWINDOW を消して、WS_EX_TOOLWINDOW を付けて、
CreateWindowEx() すれば、タスクバーにボタンは出ないことはわかった。
が、既に作ったウィンドウに対して GetWindowLong() & SetWindowLong() で
同じ事をしても、ボタンは消えてくれない。なぜ???
SPY++ で見る限り、style は同じなのだが。


511 名前:デフォルトの名無しさん :2007/02/01(木) 02:06:02
タスクバーに通知

512 名前:デフォルトの名無しさん :2007/02/01(木) 05:20:56
SetWindowLongだけでは適用されないスタイルは
ShowWindowとかSetWindowPosすると適用されたりする。
非公式な動作なので保証はできないが。

513 名前:デフォルトの名無しさん :2007/02/01(木) 09:11:02
>>511
ボタン出す時は、WM_USER+1280 投げればよさげ。
消すときがわからん

>>512
HIDE→SHOWしてもだめ
SWP_DRAWFRAME もだめ


WM_USER+1280ってことは、ツールバーコントロール的に、やれってこと?



514 名前:デフォルトの名無しさん :2007/02/01(木) 09:18:11
やったことないけど、これでなんとかならんの?
ttp://msdn2.microsoft.com/en-gb/library/ms631840.aspx

515 名前:デフォルトの名無しさん :2007/02/01(木) 10:49:50
VCLアプリだとShowWindow(Application.Hnadle, SW_HIDE)で

516 名前:デフォルトの名無しさん :2007/02/01(木) 14:27:12
いっそのことタイトルバー消しちゃえば良いんでないの?
とか言ってみる

517 名前:デフォルトの名無しさん :2007/02/01(木) 14:29:22
そして自前でタイトルバーらしきものを描画するってか

518 名前:デフォルトの名無しさん :2007/02/01(木) 14:29:49
表示しないウインドウの子ウインドウ

519 名前:デフォルトの名無しさん :2007/02/01(木) 15:13:07
>>516-517
自前タイトルバーにドラッグ機能つけんといかんが、
その方法が手っ取り早いと思う。 問題はWinバージョンに
よってタイトルバーデザインが異なる点をどうするかだけど。

520 名前:デフォルトの名無しさん :2007/02/01(木) 17:02:53
>>513
ttp://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_int/shell_int_programming/taskbar.asp?frame=true#Managing_Taskbar_But
これじゃない?

521 名前:デフォルトの名無しさん :2007/02/01(木) 17:09:37
ドラッグはNCHITTESTでTITLE返せばいいだけだけど、
自前描画で解決は道が違うだろう

522 名前:デフォルトの名無しさん :2007/02/01(木) 18:21:52
ITaskbarListいじっちゃうとか

523 名前:ITaskbarList :2007/02/01(木) 18:24:43
私をいじって♪

524 名前:デフォルトの名無しさん :2007/02/01(木) 21:01:51
Vistaのエクスプローラの、
「詳細ペイン」とか「プレビューペイン」を表示/非表示するコマンドを
もしかして知ってる人いないですかね。いませんよね。


525 名前:デフォルトの名無しさん :2007/02/01(木) 21:02:18
vista系のスレで聞いてみれば

526 名前:510,513 :2007/02/01(木) 22:25:34
>>514
>>520

ありがと、軽く読んだ感じでは、できそうですね。
週末にでも試してみます!



527 名前:510,513 :2007/02/02(金) 00:08:02
消せた。

CoInitialize((LPVOID) NULL);
ITaskbarList *pTL;
HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void**) &pTL);
pTL->HrInit();
pTL->DeleteTab(hwndTarget); // 消したいウィンドウを指定
pTL->Release();
CoUninitialize();

EXSTYLE 関係無く、消せるのね。
でも EXSTYLE ちゃんとしとかないと、非アクティブ→アクティブで、
再スキャンされて、またボタンが出てくる。

EXSTYLE だけの設定で、再スキャンさせて消してもらう方法は無いのか?


528 名前:デフォルトの名無しさん :2007/02/02(金) 01:17:26
サウンドの多重再生はどうやったらできますか

529 名前:デフォルトの名無しさん :2007/02/02(金) 01:19:29
むかーしMS謹製非サポートのサウンド多重再生ライブラリがダウソできた記憶が……
今ならDirectX使え、ってことになるのかも

530 名前:デフォルトの名無しさん :2007/02/02(金) 01:21:04
WDMドライバなら、カーネル側で合成してくれなかったっけっか。
それを期待できないほど古いハードウエアならご愁傷様。

531 名前:デフォルトの名無しさん :2007/02/02(金) 01:23:41
>>529
おまえそれWindows95時代の話じゃないか?

532 名前:デフォルトの名無しさん :2007/02/02(金) 01:39:31
wavemix懐かしす

533 名前:デフォルトの名無しさん :2007/02/02(金) 04:09:01
>>510
hide なウィンドウ1個作って
そのウィンドウを親にして子ウィンドウを作っていく。

とか。

534 名前:デフォルトの名無しさん :2007/02/02(金) 07:09:53
つーかそれしかない

535 名前:510,513 :2007/02/02(金) 09:06:45
最初からボタン出さないならTOOLWINDOWでいい
今回は途中で消したい
あ、サイズ0で親作って途中でHIDEしろってことか
フラグに比べると面倒だなぁ


536 名前:デフォルトの名無しさん :2007/02/02(金) 10:25:37
MessageBoxってスレッドセーフなんでしょうか
また、もしスレッドセーフだったとして
スレッドセーフとか考えずにMessageBoxのラッパを書いたら
スレッドセーフじゃなくなるものでしょうか

537 名前:デフォルトの名無しさん :2007/02/02(金) 10:25:49
最初からHIDEでいいじゃん

538 名前:デフォルトの名無しさん :2007/02/02(金) 10:27:59
>>536
MessageBoxに対して複数スレッドからアクセスすることなんてある?
何しようとしてるの?

539 名前:536です :2007/02/02(金) 10:34:24
C++のストリームみたいにアクセスできる
メッセージボックスのラッパを書いて使ってたんです
シングルスレッドでは、特に問題なかったんですが
グローバルなマウスフックのプログラムを書いていて
mbstream << x座標 << y座標 << std::endl;
mbstream.show(); //ここでメッセージボックス表示
メッセージボックスを表示した時に
同じ座標の値が一つのメッセージボックスに大量に表示されてしまいました
なので、もしかしてマルチスレッドの問題かなと思ったんですが
見当違いだったらすみません

540 名前:デフォルトの名無しさん :2007/02/02(金) 10:48:32
プログラムの問題

541 名前:デフォルトの名無しさん :2007/02/02(金) 11:16:56
GetPrivateProfileString で ini ファイルを読もうと思っているのですが、
セクション名のないキーの値を取得することはできないんでしょうか?

普通の ini ファイルの中身は
[hoge]
fuga=unko
のようになっていますが、事情があって
fuga=unko
しか書いていないのです(変更することはできません)。

試しに
DWORD result = GetPrivateProfileString("", "fuga", "", 値へのポインタ, MAX_PATH, iniファイルへのパス);
と、セクションに空文字列を設定してみましたが、空文字列が取得できただけでした。
やっぱり自分でファイル開いて読むしかないでしょうか?


542 名前:デフォルトの名無しさん :2007/02/02(金) 11:19:00
textで読めばいいと思うよ

543 名前:デフォルトの名無しさん :2007/02/02(金) 11:23:20
やっぱそうですよね、ありがとうございました。

544 名前:393 :2007/02/02(金) 12:16:06
DuplicateHandleで他プロセスのMutexをクローズできるかどうか質問した者です。
DuplicateHandleを試してみたのですが、SourceHandleを設定する際に、他プロ
セスのハンドルを取得することができません。他プロセスのMutexハンドルを取得す
る方法はあるのでしょうか?
または、ProcessExplorerみたいに他のプロセスのハンドルを列挙してハンドルを閉
じるということはできるのでしょうか?

545 名前:デフォルトの名無しさん :2007/02/02(金) 12:56:37
>>541
ファイルの中身をコピーして、頭にセクション名を付加するといいぉwww

546 名前:デフォルトの名無しさん :2007/02/02(金) 16:23:03
>>545
おまえ頭いいな

547 名前:デフォルトの名無しさん :2007/02/02(金) 17:20:16
>>539
とりあえずストリームとメッセージボックスに問題を分けてみよう。
これでどうよ。
std::basic_ostringstream<TCHAR> os;
os << x << y << std::endl;
MessageBox(0, os.str().c_str(), TEXT(""), MB_OK);

548 名前:デフォルトの名無しさん :2007/02/02(金) 17:42:59
MessageBoxが止まるのは、呼び出したスレッドだけだし。
中でメッセージループは回るし。
グローバルフックなら、各アプリケーションの各スレッド全部が
MessageBox出すだろそりゃ。

549 名前:デフォルトの名無しさん :2007/02/02(金) 17:51:38
MessageBoxって、下にあるWindowに
WM_PAINT処理があっても再描画してくれない?

550 名前:デフォルトの名無しさん :2007/02/02(金) 18:04:21
>>549
くれるよ(別にMessageBoxが再描画するわけじゃないけど)。

551 名前:デフォルトの名無しさん :2007/02/02(金) 18:36:28
>>547
試してみました。長文になりますがお許しください
該当部分のソースです
if(wp==WM_MBUTTONDOWN){
MOUSEHOOKSTRUCT*pm=(MOUSEHOOKSTRUCT*)lp;
std::basic_ostringstream<TCHAR> os;
os << pm->pt.x << pm->pt.y << std::endl;
MessageBox(0, os.str().c_str(), TEXT(""), MB_OK);
//MessageBox(0,L"a",L"aa",MB_OK); //上3行をこれに変えても同じ結果
}
マウス中ボタンをほんの一瞬押しただけで
メッセージボックスがわんさかでます
なお、前回からわかった点は
MessageBox(hwnd,L"",L"",MB_OK);
このようにウィンドウハンドルを指定すると
メッセージボックスは1つしかでません
このとき、入力データを.exe側にポストすると
普通にデータがきているみたいでした

一言でまとめると、ウィンドウハンドルを
指定したら同期処理されてるっぽい?

552 名前:536です :2007/02/02(金) 18:40:31
あ、名前欄入れ忘れた
551は536です

553 名前:デフォルトの名無しさん :2007/02/02(金) 18:57:11
・・・・・・

554 名前:デフォルトの名無しさん :2007/02/02(金) 18:57:53
>>551
全プロセスの全スレッドでそれが動いて、hWnd が有効な1つのプロセスでだけ
「メッセージボックスは1つしかでません 」ってことじゃないの?

それは別としても、グローバルフックでメッセージボックスは出さない方がいいと思うよ。

555 名前:デフォルトの名無しさん :2007/02/02(金) 19:17:00
キチガイはいきなりわけわからんことやるから怖い

556 名前:536です :2007/02/02(金) 19:33:14
>>554
メッセージボックスをたくさん出したいわけではなくて
単にフォアグラウンドのスレッドのマウスの軌跡を表示させたかったんですが
ええと、これってそもそもスレッドセーフとか全然関係ないことでしょうか

>>それは別としても、グローバルフックでメッセージボックスは出さない方がいいと思うよ
次からそうすることにします
ブレークポイントとかきかないし、フック処理はデバッグ難しいですね


557 名前:デフォルトの名無しさん :2007/02/02(金) 20:24:10
>>556
スレッドセーフっていうかさ、どんなライブラリをリンクしているとも知れない他所の
プロセスにコード挿入して

 std::basic_ostringstream<TCHAR> os;
 os << pm->pt.x << pm->pt.y << std::endl;

って大丈夫?どこのヒープからどうアロケートされることを期待してるんだ?

558 名前:デフォルトの名無しさん :2007/02/02(金) 20:51:49
win32apiの関数だけでサウンドの多重再生できませんか?
サウンドの多重再生を実現するためだけにDirectXを勉強したくないんですけど

559 名前:デフォルトの名無しさん :2007/02/02(金) 20:52:07
背伸びし過ぎ
だから不具合が出たときも検討違いのところしか
考えられなくて原因が追求できない

560 名前:デフォルトの名無しさん :2007/02/02(金) 20:53:32
>>557
すみません、ライブラリのリンクがどう関係するかまではわからないんですが
DLL挿入先のプロセスのアドレス空間でアロケートされると思ってます
今は暗黙のリンクにしているので
.exeのほうで静的なコンストラクタ等が呼ばれるよりも前に
各DLLのDllMainが呼ばれて、おそらくこのタイミングで
ストリームの初期化が行われているんだと思ってます
ストリームではなくデータをどう保存するかは考え中だけど
今のところメモリマップトファイルに保存しようと思ってます

561 名前:デフォルトの名無しさん :2007/02/02(金) 20:54:11
>>558
DirectX勉強する方が遥かに楽だよ

562 名前:デフォルトの名無しさん :2007/02/02(金) 21:26:06
>>561
そうすか。
じゃあ画像描画の部分もdirectX使ってプログラム全部書き直すかなあ。
ああ面倒くせ挫折するかな

563 名前:デフォルトの名無しさん :2007/02/02(金) 21:27:06
>>558
Vistaが出て、今後益々Windowsのマルチメディアの中核にDXが来るこのご時世に
そんなわがまま言ってるようじゃプログラマじゃないぜ
より少ない労力でより良い効果を出すのがプログラマですよ?

564 名前:デフォルトの名無しさん :2007/02/02(金) 21:27:10
DllMainのDLL_PROCESS_ATTACH内でメモリリークさせた状態でFALSEを返して、
クライアント側のロードを失敗させた場合って
クライアント側のプロセスにとっては事実上リークはなかったことになるんでしょうか?

565 名前:デフォルトの名無しさん :2007/02/02(金) 22:31:53
>>562
勉強が嫌いなら早めに挫折するといいよ

566 名前:デフォルトの名無しさん :2007/02/02(金) 22:38:34
>>562
何のためにDirectXがコンポーネントになってると思う?
DirectSoundを使うからと言ってDirectX Graphicsまで使う必要は無いぞ。

567 名前:デフォルトの名無しさん :2007/02/02(金) 22:54:36
ochinchin.h を manko.cpp に include したはずなのに童貞が捨てられません

568 名前:デフォルトの名無しさん :2007/02/02(金) 23:06:21
#ifndef WOTAKU で除外されてるからさ

569 名前:デフォルトの名無しさん :2007/02/03(土) 01:40:42
>>560
デバッグメッセージは、WM_COPYDATAを使って送りつけるといい。

570 名前:デフォルトの名無しさん :2007/02/03(土) 03:07:32
素朴な疑問。

SysListView32とかToolBarWindow32とかは、
64bit環境でも同じ名前なの?


571 名前:デフォルトの名無しさん :2007/02/03(土) 04:26:56
>>564
ならない。

572 名前:デフォルトの名無しさん :2007/02/03(土) 04:28:05
>>570
同じ。64bit DLLがsystem32にあって32bit DLLがSysWOW64にあるくらいですから

573 名前:デフォルトの名無しさん :2007/02/03(土) 04:37:26
CCritSecクラスをDLLのグローバルインスタンスで宣言した場合、
これは正しくCRITICAL_SECTIONを初期化できるのでしょうか?
それともDllMainが処理された後でないと正しくInitializeCriticalSectionが成功しないのでしょうか?



574 名前:デフォルトの名無しさん :2007/02/03(土) 06:28:10
デバッグして自分で確認すればいいじゃないか。

575 名前:デフォルトの名無しさん :2007/02/03(土) 06:30:44
ごめん。おいらの勘違いだった。
どうもイベントハンドルをもったまま終了するスレッドがあって
そいつのせいでおかしくなって他っぽい。
そのバグとったらクリティカルセクションで守っているコードブロックを同時にアクセスしなくなった。

576 名前:デフォルトの名無しさん :2007/02/03(土) 10:51:43
ディレクトリ以下を再帰的に全部削除してくれる API ってない?
DeleteDirectory じゃ空じゃないとだけだから面倒なんだよねぇ。

577 名前:デフォルトの名無しさん :2007/02/03(土) 10:57:07
ShellExecuteで、rd /s (NT)かdeltree (9x)を呼んだら?
まあたぶんシェル関係の関数で何かありそうな気がするけど。

578 名前:デフォルトの名無しさん :2007/02/03(土) 11:31:24
自分で再帰的に削除するぐらい簡単に作れるだろ。

579 名前:デフォルトの名無しさん :2007/02/03(土) 11:34:34
作らなくてもあるけど思い出せない

580 名前:デフォルトの名無しさん :2007/02/03(土) 11:39:44
boost::filesystem::remove_all

581 名前:デフォルトの名無しさん :2007/02/03(土) 11:42:12
SHFileOperation

582 名前:デフォルトの名無しさん :2007/02/03(土) 11:53:30
>>576
SHFileOperation

583 名前:582 :2007/02/03(土) 12:00:21
ごめん、かぶったか。
念のため実行して確認してたんで・・・

>>576
ということで、間違いなくできるから。
確認やエラーのダイアログはフラグで出す出さない指定できるから。

584 名前:デフォルトの名無しさん :2007/02/03(土) 14:43:55
GDI+で画像拡大すると、ドット半分(2倍なら1ドット、16倍なら8ドット)左上にずれてしまうんですが
ずれなくする方法はないでしょうか?

585 名前:デフォルトの名無しさん :2007/02/03(土) 15:19:59
>>584
倍率の半分だけ右下にずらして描画する。

586 名前:デフォルトの名無しさん :2007/02/03(土) 18:22:54
XP SP2のネットワーク共有フォルダのファイルをFindFirstFileで
列挙すると、とても遅いんですが、なんとかならないでしょうか。
フォルダに2000ファイルぐらいあると10秒以上掛かります。
Windows2000では一瞬だったのに。
ネットワークドライブ、\\ホスト\共有名\〜のUNCパスどっちも遅いです。
ただし、共有フォルダの列挙が遅いだけで、
他の通信やファイルの読み書き自体は正常な速度です。
リンク速度は100Base-TXで、PCのEthernetチップは両方ともIntelです。

SH経由なら速いかなと思いましたがExplorerからも同じぐらいの遅さでした。
ポリシーやレジストリの設定くさいんですが、何かあるでしょうか?



587 名前:デフォルトの名無しさん :2007/02/03(土) 18:27:15
エクスプローラより遅いかどうかだな

588 名前:デフォルトの名無しさん :2007/02/03(土) 20:06:39
ネットの設定だな。名前解決が遅いネットワークに組みあがっているんじゃない?
何にしてもお前の問題だしスレ違い。

589 名前:デフォルトの名無しさん :2007/02/03(土) 20:39:38
>588のいうとおり名前解決の問題か、ログオン処理の問題か、考えられるのはそんなところか。
WNetAddConnection2でログオン処理をしてる?

590 名前:デフォルトの名無しさん :2007/02/03(土) 23:54:00
いま、C+Win32APIでwinプログラムの勉強を始めたばかりなんだが、
親ウインドウのHWNDを子ウインドウで使うんでグローバル変数に保存したいんだが
どこで親のHWNDを取得するのがよい?
たとえば
1. 親ウインドウをCreatWindow(Ex)した時の戻り値のところ
2. 親のプロシージャのWM_CREATEメッセージのところ(でプロシージャの引数をコピー)
等など

591 名前:デフォルトの名無しさん :2007/02/03(土) 23:56:58
>>590
子ウィンドウ側がGetParentで取得

592 名前:デフォルトの名無しさん :2007/02/04(日) 00:00:56
>>591
早い答え、dクスです
グローバル変数に保存するのではなく、必要なときにGetParentすると言うことですね

593 名前:デフォルトの名無しさん :2007/02/04(日) 00:17:23
>>558
すでにバッファにある音を再生できているなら、APIを使う必要すらないよ。
単にwavをバッファで合成してから出力するだけだし。
デバイス周りからやらなきゃならないなら、他の人が言うようにDirectSound使うのがいいかもね。

594 名前:デフォルトの名無しさん :2007/02/04(日) 00:34:18
>>592
補足
GetParent()ぐらい大したオーバーヘッドにはならないし、
下手にグローバル変数やメンバ変数使うよりも
その都度取得した方が確実で読みやすいコードになる

595 名前:デフォルトの名無しさん :2007/02/04(日) 01:32:10
そういえば、constがついてないグローバル変数は10年以上使ってないなw
_Moduleだけは使わざるを得ないけど。

596 名前:デフォルトの名無しさん :2007/02/04(日) 02:00:26
サウンドの多重再生で悩んでるものですが、
DirectSoundはC言語のみでは利用できませんか
自分が作ってきたプログラムがC言語のみで書かれてるので、
C++で書かれたDirectSoundのサンプルコードを自分のプログラムに追加できませんn
萎える

597 名前:デフォルトの名無しさん :2007/02/04(日) 02:06:38
C++コンパイラなら普通に使えるだろ

598 名前:デフォルトの名無しさん :2007/02/04(日) 02:19:14
>>596
dsound.hにC向けのマクロが用意されている、はず。
lpVtblから直接書いてもいいし。

599 名前:596 :2007/02/04(日) 20:17:24
自作のプログラムの拡張子をcppに変えて、コンパイルエラーが出ないように修正した上で、
DirectSoundのコードを追加することにより解決しました、ありがとうございました。

600 名前:デフォルトの名無しさん :2007/02/04(日) 22:56:47
Listviewのツールチップで困っています。
LVS_EX_INFOTIPを設定し、LVN_GETINFOTIPで
ツールチップを表示していますが、
表示するまでにどうしても時間がかかるので、
別のスレッドに分けました。
しかし、別のスレッドで処理を終えた後、
ツールチップを表示させることができません。

TTM_UPDATETIPTEXTとTTM_TRACKACTIVATEで表示できるのですが、
以降LVN_GETINFOTIPが来ないので、さらに困ったことに。

何か良い方法はないでしょうか?

601 名前:デフォルトの名無しさん :2007/02/04(日) 23:48:51
なんか標準コントロールを色々使ってみて出した結論。
完全に自作した方が楽だった。

602 名前:デフォルトの名無しさん :2007/02/05(月) 00:50:56
>>599
全然解決してないよそんな対処法!
なんでそんな横着なの?

603 名前:デフォルトの名無しさん :2007/02/05(月) 00:52:22
そもそも、DirectSoundはCだけで使えるしw

604 名前:デフォルトの名無しさん :2007/02/05(月) 01:31:10
でも、CよりもC++のほうが書きやすいのもまた事実。

605 名前:デフォルトの名無しさん :2007/02/05(月) 02:17:58
>>599
DirectSound周りだけC++にしてCのコードから呼び出す関数だけextern "C"つければいいやん

606 名前:デフォルトの名無しさん :2007/02/05(月) 08:31:18
いや、そこまでC++を避けなくたっていいだろ。

607 名前:600 :2007/02/05(月) 20:46:07
>>601
やっぱりそうですか。
自作となるといろいろやることが多くて、
できれば標準のものが使えればいいんですけどね〜。

608 名前:デフォルトの名無しさん :2007/02/05(月) 21:10:32
ライブラリパスの追加方法
#pragma comment (linker, "/libpath:..\libdir")
は見つかったんですが、同様(似たような)の方法でインクルードパスを
追加する方法ってありませんか?

609 名前:デフォルトの名無しさん :2007/02/05(月) 21:17:31
GetGlyphOutlineを使用しているのですが、SystemやTerminalなどのフォントでエラーを返してしまいます。
エラーを返してしまうフォントかどうかを判別するにはどうすればいいでしょうか?
「システムフォント」や「デバイスフォント」など区別の仕方が沢山あってどうも混乱してしまいます。
デバイスフォントであればEnumFontFamExProcの引数FontTypeでDEVICE_FONTTYPEが立っているかどうかで判別できるのですが・・・
詳しい方ご教授よろしくお願いします。

610 名前:デフォルトの名無しさん :2007/02/05(月) 21:22:35
WinInetでFTP転送を行うソフトを昔作ったんだけど
今度サーバーがSSHになったら動かなくなってしまいました。

なんかこう、コンポーネントかなんか入れてちょっとした改造で
動くようになりませんかね?
絶対無理?


611 名前:デフォルトの名無しさん :2007/02/05(月) 21:49:26
それは冗談で言っているのか(AA略

612 名前:デフォルトの名無しさん :2007/02/05(月) 21:57:59
冗談に決まってるだろ。
実情知ったら青ざめるに尻毛100本。

613 名前:610 :2007/02/05(月) 22:07:42
冗談じゃないっす…
>>612の尻毛を抜かせてもらいます

614 名前:デフォルトの名無しさん :2007/02/05(月) 22:14:51
>>609
GetGlyphOutline()ってTrueTypeだけだから
tmPitchAndFamily & TMPF_TRUETYPEでいいんじゃない

615 名前:デフォルトの名無しさん :2007/02/05(月) 22:17:38
>>610
INTERNET_FLAG_SECURE

616 名前:デフォルトの名無しさん :2007/02/05(月) 22:18:33
それSSL

617 名前:デフォルトの名無しさん :2007/02/05(月) 22:21:20
>>610
サーバーをちょちょっといじって、ftpサーバー立てれば?

618 名前:デフォルトの名無しさん :2007/02/05(月) 22:38:01
pscpとかpsftpとか使えばいいじゃん。

619 名前:デフォルトの名無しさん :2007/02/05(月) 22:49:00
GetDCを2連荘で呼んだらReleaseDCも2連荘で呼ばなければなりませんか?

620 名前:610 :2007/02/05(月) 22:49:38
おっと失礼、FTPでなくてHTTPでした
ソース見直したらInternetReadFile使ってた

商品なので、フリーのソフトとかつけられないんです
ごっそり改造だと金かかるしなー
正直にちょっと直すくらいじゃむりぽと言ってしまうのが正しいか


621 名前:デフォルトの名無しさん :2007/02/05(月) 22:53:23
>>619
必要がなくなった時にReleaseDC(解放)すればいいんじゃない?
DCリソースが不足気味ならこまめに解放しないといけないが

622 名前:デフォルトの名無しさん :2007/02/05(月) 22:53:52
ぬるぽ

623 名前:デフォルトの名無しさん :2007/02/05(月) 22:59:01
>620
じゃあ本家のssh付ければいいじゃん。
http://www.ssh.com/products/client-server/features_benefits.html

624 名前:デフォルトの名無しさん :2007/02/05(月) 23:00:45
>>608
Win32APIと関係ない

625 名前:610 :2007/02/05(月) 23:11:37
>>623
正式なのがあるんですね。買ってもらえるか打診してみます
つーかその前に、機能変わらないのに改造だけで開発費だしてもらえるかどうかが問題だけど


626 名前:デフォルトの名無しさん :2007/02/05(月) 23:31:03
>>619
取得したhdcをどうしてるのかしらないけどタスクマネジャ-でGDIオブジェクト数確認したほうが良い
vectorとかにはそういうツールが蔓延してるけどな

system("pause");
HDC hdc1 = GetDC(NULL);
system("pause");
HDC hdc2 = GetDC(NULL);
system("pause");
 ReleaseDC(NULL, hdc1);
system("pause");



627 名前:デフォルトの名無しさん :2007/02/05(月) 23:49:25
unixのexec()みたいなことはWin32APIではできないの?


628 名前:デフォルトの名無しさん :2007/02/05(月) 23:53:10
CreateProcess()の何が不満だ

629 名前:デフォルトの名無しさん :2007/02/05(月) 23:59:31
>>628
プロセスIDが別になること。
子アプリをラップしたいんです。

630 名前:デフォルトの名無しさん :2007/02/06(火) 00:11:01
プロセスIDが別になると、子アプリをラップするのに何の不都合が?


631 名前:デフォルトの名無しさん :2007/02/06(火) 00:14:26
job使えば?

632 名前:デフォルトの名無しさん :2007/02/06(火) 00:14:58
>>630
親が子プロセスIDで操作しても、孫に効かない。

633 名前:デフォルトの名無しさん :2007/02/06(火) 00:15:47
win32_forkの実装を、ドライバとかにもったうえで、そいつが
exec対象のEXEをでがんばって読み込んで、現在実行中の
プロセスを書き換えてやれば実現出来るような気もする。

ちなみにcygwinでは諦めた、という話があるな。
http://www.sixnine.net/cygwin/translation/cygwin-ug-net/highlights.html
>Win32 の元では実際の exec を行う方法が存在しないため、
>Cygwin は独自のプロセス ID(PID)を考案しました

634 名前:デフォルトの名無しさん :2007/02/06(火) 00:58:34
プロセスじゃなくてスレッドを使ってみるとか・・・

635 名前:デフォルトの名無しさん :2007/02/06(火) 01:07:48
>>632
具体的に子プロセスに対して"何"をしたいのよ?
その中身にもよるけど、Windowsじゃ難しいような気がする。

636 名前:デフォルトの名無しさん :2007/02/06(火) 01:09:35
>>632
子プロセスを変更することが出来るなら、
ファイル マッピング オブジェクトに孫プロセスのプロセスIDを書きこむようにして

|プロセスの深さ|子プロセスID|孫プロセスID|...|

(操作するプロセスID) = (プロセスIDリスト) [ (プロセスの深さ) ]

ってな具合にすればいいんじゃないだろうか

637 名前:デフォルトの名無しさん :2007/02/06(火) 01:12:02
ファイルマッピングとか、とにかくプロセスが複数絡むと
デバッグが異様にやりづらくなるんだよなあ……

638 名前:デフォルトの名無しさん :2007/02/06(火) 06:08:49
InterixのアプリってWin32からは操作できないんだっけ?

639 名前:デフォルトの名無しさん :2007/02/06(火) 07:18:19
子プロセスが勝手に子プロセスを産んでも処理できる、
そのためのJobObjectじゃないのか。

640 名前:デフォルトの名無しさん :2007/02/06(火) 10:50:03
ファイルマッピングオブジェクトのソースコードを書いてみたのですが、
初めて書いたのでエラー処理で足りない部分があれば教えて頂けないでしょうか?
ちなみに Win9x でテストしています。WindowsXPだと別な処理が必要になるのでしょうか?

本来はヘッダでまとめるべきリテラルがあちこちに埋め込んであるのはスルーしてくださいm(__)m
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3618.lzh

a.exe を起動して enter を押す
b.exe を起動して enter を押す
a.exe 側で enter を押す

b.exe で enter を押すたびに a.exe で表示される値が変更される仕様です

641 名前:640 :2007/02/06(火) 11:04:19
>>640 は MapViewOfFile が失敗した時に CloseHandle するのを忘れていました。

他に問題点があれば指摘して下さい。

642 名前:デフォルトの名無しさん :2007/02/06(火) 11:34:23
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win73.html
>この関数(SetCursor)は WM_MOUSEMOVE が発生するたびに呼び出すのが一般的です
とありますが、元に戻ったりでチラついてしまいます。
領域内に触れたとき一時的にマウスカーソルを変更したいのですが、
ちらつかないようにする方法を教えてください。お願いします。

643 名前:642 :2007/02/06(火) 11:38:31
×元に戻ったり
○点滅したり

644 名前:デフォルトの名無しさん :2007/02/06(火) 11:43:46
>>642
SetCursor 部分を削除するか、WNDCLASS の hCursor を NULL にするかでいいんじゃないかな?

WNDCLASS の hCursor が NULL 以外の時は、
システムが以前のカーソルを復元しようとするらしいので、
それが原因でちらついていると思われる。

645 名前:642 :2007/02/06(火) 12:04:58
>>644
>SetCursor 部分を削除するか
元に戻そうとするメッセージをですか?

646 名前:デフォルトの名無しさん :2007/02/06(火) 12:08:10
1.Windowsの再生デバイスの設定(デフォルト)を変更する方法ってありますか?
(waveOutOpenでWAVE_MAPPER指定したときに、再生先が変わってほすぃ)

2.waveOutOpenでデバイス指定して、ADPCM再生する方法って?
(ACM?? 手順がわからない... ソース乗ってる解説サイトとかありますかね...)

よろしく...

647 名前:642 :2007/02/06(火) 12:17:19
>>644
できればクラスを再定義せず変更したいので、
前者の方法を教えてください。
マウスが動いたりクリックする度にSetCursorを送るメッセージがあるのだと
思っていたのですが、違っていたらすみません。

648 名前:デフォルトの名無しさん :2007/02/06(火) 12:24:17
まずはやってみようぜ…?

649 名前:デフォルトの名無しさん :2007/02/06(火) 12:35:33
>>642
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win73.html
のソースコードを一切書き換えずに実行してみればいい

650 名前:642 :2007/02/06(火) 12:39:21
>>648-649
申し訳ありません。本当に勘違いでした。
NULLにしたらカーソルが表示されないのかと思ってたらしいです。
ご迷惑おかけしました。
ありがとうございます。

651 名前:デフォルトの名無しさん :2007/02/06(火) 12:40:56
FreeLibraryを対象になるDLL側から禁止することは無理ですか?

DLL_PROCESS_DETACHでFALSE返しても結果には影響しないようだし
DllMain - DLL_PROCESS_DETACH内で待機関数使ってスレッドとめることも状況的にできない
ロードされた側のFreeLibrary自体をいじればなんとかなると思うけど大掛かり過ぎるし…

652 名前:デフォルトの名無しさん :2007/02/06(火) 12:49:40
普通に考えて、FreeLibrary()してもデタッチされないDLLって
半分ウイルスみたいなタチの悪い代物になると思う。
FreeLibrary()をフックするしかないんじゃない?
既にアタッチされてるのが前提なら一般的なAPIフックより少しは楽。

653 名前:デフォルトの名無しさん :2007/02/06(火) 12:56:07
>>652
基本的なトリックでアンロードの拒否ができればいいなーとおもったんですが
やっぱそうなりますか

即答どうもです

654 名前:デフォルトの名無しさん :2007/02/06(火) 12:59:35
>>651
自分自身を LoadLibrary すりゃいいんじゃね?

655 名前:デフォルトの名無しさん :2007/02/06(火) 13:20:38
>>654
どうも。
一瞬すごい これだ! と思ったけどいろいろ問題ありで怖いんで
素直にFreeLibをフク-するか、所詮自分様専用ってことであきらめるかしますわ 

656 名前:デフォルトの名無しさん :2007/02/06(火) 13:39:15
マ板の69式のおっさんを呼び込むスレからきました

657 名前:デフォルトの名無しさん :2007/02/06(火) 13:54:14
>>495
実は方法ある
詳細についてはMSのページに長いコードがあるから割愛するけど
簡単に言えばデフォルトで裏側にウィンドウを表示しているのを表側に表示するコードを書くだけ
たったこれだけなんだけどコードはえらく長い

658 名前:627 :2007/02/06(火) 14:11:38
>>635
タスクスケジューラではWindowStyleが指定できないので、
CreateProcessを被せればよいかなと思ったのですが、
そうすると今度は「タスクの終了」が孫に効かなくなるので、
なんかいい方法はないものかと。。。

659 名前:デフォルトの名無しさん :2007/02/06(火) 15:09:31
>>658
CreateProcess で開いたハンドルを保持しておいて、
SetConsoleCtrlHandler 使ってプロセスが終了したときに
ExitProcess するようなコードを書けばいいと思う。

660 名前:デフォルトの名無しさん :2007/02/06(火) 17:59:30
>>655
モジュールの参照カウントをあげておけばアンロードされない
自身でLoadLibraryしてもいいし、GetModuleHnadleでもいいんじゃないかと

661 名前:デフォルトの名無しさん :2007/02/06(火) 18:01:14
GetModuleHandleはダメだと思うよ。

662 名前:デフォルトの名無しさん :2007/02/06(火) 18:02:45
GetModuleHandleは参照カウント増やさないだろ

663 名前:662 :2007/02/06(火) 18:03:28
被ったorz

664 名前:627 :2007/02/06(火) 19:07:41
>>659
SetConsoleCtrlHandleはコンソールアプリでないと駄目なのでは?
[親(スクスケジューラ)]->[子(CreateProcess)]->[孫(アプリ/バッチ)]
子はコンソールアプリでないウィンドウアプリ(ウィンドウなし)
の関係を考えています。なんか無理そうですね。諦めモード。

665 名前:デフォルトの名無しさん :2007/02/06(火) 19:11:37
だから、ジョブオブジェクトは何の不満があるのか

666 名前:デフォルトの名無しさん :2007/02/06(火) 19:13:18
GetModuleHandleって参照カウント上げなかったっけか。失礼

667 名前:デフォルトの名無しさん :2007/02/06(火) 19:14:17
ジョブの入れ子にすればいいじゃん

668 名前:デフォルトの名無しさん :2007/02/06(火) 19:29:30
タスクスケジューラーってタスクをジョブオブジェクトで管理してるの?
(.job に対応する job object じゃない方のジョブオブジェクト)

669 名前:デフォルトの名無しさん :2007/02/06(火) 19:38:00
ラッパを生かし続けてて、タスクスケジューラの終了メッセージで
子供を殺せばいいんじゃね?

670 名前:627 :2007/02/06(火) 21:10:11
>>665
すみません。ジョブオブジェクト調べてみましたが、
これでどうやってできるのか分りませんでした。
unixのプロセスグループだと、プロセスグループリーダが死ぬと、
みんな巻き添えになったような気がしますが、
ジョブオブジェクトにもそういう仕組みがあるのでしょうか?

>>669
ですね。非表示のウィンドウを使えばいいみたいです。

671 名前:651 :2007/02/06(火) 21:16:28
具体的な問題をいうと、MSGBOXをIATの書き換えとDLLでフックしてるところ、
そのフック関数の最中にDLLがアンロードされてしまうと、
フック関数がぬるぽを参照することになって落ちるという状態です。

再LoadLibraryだとアンロードされないんじゃなくて
アンロードされて、新しい再配置なインスタンスになるんでアドレスが違ってしまって、
フック関数のアドレスを正しく引きつぎできない。

相当乱暴に自身へのFreeLibraryは常にFALSEを返して
FreeLibrary経由しないDLL_PROCESS_DETACHでは、
まあ、面倒くせーから状況見て待機させちゃうか、強制的にmsgboxから制御奪うかなって感じでいますが、

>>670
CreateJobObjectしてそいつにプロセスを追加してく
殺すときはTerminateJobObjectって流れ


672 名前:デフォルトの名無しさん :2007/02/06(火) 21:20:40
>>671
DllMain で即 LoadLibrary して、ロードしたモジュールの方の関数でフックすれば良いよ。
ってか漏れがやったときは単に LoadLibrary でOKだったけどなぁ・・・

673 名前:デフォルトの名無しさん :2007/02/06(火) 21:22:44
DETACHされたときにIATを戻してやれよ・・・

674 名前:デフォルトの名無しさん :2007/02/06(火) 21:26:38
>>673
フックの種類によってはまさに置き換えたコードを実行中ということもあるので、
アンロードされないようにすることもある。

>そのフック関数の最中にDLLがアンロードされてしまうと、
>フック関数がぬるぽを参照することになって落ちるという状態です。


675 名前:デフォルトの名無しさん :2007/02/06(火) 21:36:22
大半のAPIなら瞬間的に制御が帰るので気づかなかったんですが
>>674のとおりです

>>672
できました。感動です。
DLL_PROCESS_DETACHでLoadLibraryしたときに再配置になって、
初回のアタッチのときなら再配置じゃなくてカウントあげになるみたいです
うだうだお騒がせしました

676 名前:デフォルトの名無しさん :2007/02/06(火) 22:30:12
>>675
ttp://msdn2.microsoft.com/en-us/library/ms682583.aspx
>The entry-point function should perform only simple initialization or termination tasks.
>It must not call the LoadLibrary or LoadLibraryEx function (or a function that calls these functions),
>because this may create dependency loops in the DLL load order.

677 名前:デフォルトの名無しさん :2007/02/06(火) 22:52:44
>because this may create dependency loops in the DLL load order.

678 名前:デフォルトの名無しさん :2007/02/06(火) 23:07:54
>>676
いや、今回はまさに、dependency loopとやらをでっち上げたいんだが。

無駄知識
LoadLibraryしまくって、参照カウンタを最大までインクリメントすれば、絶対にアンロードされない
ttp://blogs.msdn.com/mgrier/archive/2005/06/18/430522.aspx

679 名前:デフォルトの名無しさん :2007/02/06(火) 23:14:37
dependency loops in the DLL load order の問題ってのは、
例えば A.dll depends B.dll, B.dll depends C.dll, C.dll depends A.dllっていうときに、
A.dll のエントリポイントで LoadLibrary("B") とやると嵌まるよ、ということ。

今回明らかに問題ない。

680 名前:デフォルトの名無しさん :2007/02/06(火) 23:42:37
>>642
> WM_MOUSEMOVE が発生するたびに呼び出すのが一般的
ってマジか? そのためのWM_SETCURSORだと思ってたのだが

681 名前:デフォルトの名無しさん :2007/02/06(火) 23:43:55
GetModuleHandleExならデフォルトで参照カウント上げるし
絶対アンロード不可能にするオプションもあるな。Windows XP以降でしか使えないけど

682 名前:デフォルトの名無しさん :2007/02/06(火) 23:47:38
>>642
クライアント領域に入ったらこのカーソル、みたいな感じならば
WM_SETCURSOR のハンドラで SetCursor する。

アプリで任意のタイミングで変えたいのなら、
それ+任意のタイミングで SetCursor する。

ちらつくのは多分WM_SETCURSORでの処理を忘れているため。
WM_MOUSEMOVEで常に SetCursor しているなら、
WM_SETCURSOR では単に return 0L するだけでもよい。

683 名前:デフォルトの名無しさん :2007/02/07(水) 00:08:09
perlでデフォルトプリンタ名を取得したいのですが、

use Win32::API;
$pr = new Win32::API('winspool.drv', 'GetDefaultPrinter', '', 'P');
print $pr->Call();

どこがおかしいですか?

684 名前:デフォルトの名無しさん :2007/02/07(水) 00:59:38
use Win32::API;
$GetDefaultPrinter = new Win32::API('winspool.drv', 'BOOL GetDefaultPrinter(LPTSTR, LPDWORD)');
$pszBuffer = ' ' x 200;
$pcchBuffer = length($pszBuffer);
$GetDefaultPrinter->Call($pszBuffer, $pcchBuffer);

試してないが。

685 名前:69式オサンクローン ◆4E1yVnBRhg :2007/02/07(水) 01:18:53
ここはデバドラの質問もあり?

686 名前:デフォルトの名無しさん :2007/02/07(水) 01:26:39
【WDM】Windows Driver Model相談室【デバドラ】
http://pc10.2ch.net/test/read.cgi/tech/1063453024/l50


687 名前:683 :2007/02/07(水) 02:07:23
>>684

ありがとうございます。
残念ながら、動きません。




688 名前:640 :2007/02/07(水) 02:11:05
>>640 には >>641 以外の問題なしということでOKでしょうか?
問題が出るほど大きなコードではないと思うけど・・・

689 名前:683 :2007/02/07(水) 02:21:10
>>687

これでいけました。

use Win32::API;

$GetDefaultPrinter = new Win32::API('winspool.drv', 'GetDefaultPrinter', 'PP','N');
$pszBuffer = ' ' x 200;
$pcchBuffer = length($pszBuffer);
$GetDefaultPrinter->Call($pszBuffer, $pcchBuffer);

print $pszBuffer;

690 名前:デフォルトの名無しさん :2007/02/07(水) 06:54:40
まだまだ、各サイトにあるWin32APIのサンプルを書き換えて
プログラムの練習をしているレベルの質問者です。

CreateDialogで作ったダイアログにテキストを描画したいと思っています。
プログラムの結果を表示するためなのですが、何か参考になるサンプル
プログラムがサイトか、理解の手がかりになるAPIなどを教えてください。

まだまだ、理解が浅いので描いたコードがまずいのですが、DrawTextで
描画するようなコードを書いてみたらエラーで落ちてしまいました。


691 名前:デフォルトの名無しさん :2007/02/07(水) 09:01:28
CreateWindowで作るウインドウのタイトルバーをなくしたいのですが、
リージョンで表示させない以外に何か方法はありますか?
タイトルバーをなくしたいのは自作のウインドウだけです。
よろしくお願いします。


692 名前:船場合気道同好会(覚醒剤中毒)元龍貴Contact ◇MasterNNok :2007/02/07(水) 09:04:10
船場合気道同好会(覚醒剤中毒)元龍貴Contact ◆MasterNNok
http://sports10.2ch.net/test/read.cgi/budou/1144120516/401-500
http://sports10.2ch.net/test/read.cgi/budou/1149945436/801-900
http://sports10.2ch.net/test/read.cgi/budou/1165146415/301-400
嘘で合気会・合気道三段を名乗り経歴詐称して2ch住人から5年間で合計
数百万円猫糞し トンヅラしている覚せい剤ジャンキーです。 この男を見つけたら110番
主催している段位詐称詐欺武道 反射道 http://homepage2.nifty.com/hanshado/
<<<連絡先 奈良県警吉野署生活安全課 熊代刑事>>>
http://news21.2ch.net/test/read.cgi/news2/1155668899/677
■覚せい剤中毒・元龍貴(反射道)が投稿規制をかける秘密のURL(笑)
※スレ内では「合気道三段」となっている証拠、二重リンクしておきます。
※HNは、ウサで登場 http://bbs.2ch2.net/test/read.cgi/sns/1161301239/l
■偽合気道有段者の有料詐欺講習会証拠「ウロコを落とせ!」(参加費一日最高8000円)
※HNは、HAJIMEのすけ、天下無敵、万有愛護、合気バカ一代などで登場
http://sports.2ch.net/budou/kako/1015/10154/1015423701.html
http://sports.2ch.net/budou/kako/1024/10242/1024232697.html
http://pc.2ch.net/ad/kako/1015/10155/1015559182.html
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
元龍貴(はじめ りゅうき)を合気道経歴詐称・覚醒剤取締法違反で逮捕する場所
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■元龍貴の現住所 大阪市中央区南船場1-14-7 アインズ南船場306
http://maps.google.co.jp/maps?q=%E5%A4%A7%E9%98%AA%E5%B8%82%E4%B8%AD%E5%A4%AE%E5%8C%BA%E5%8D%97%E8%88%B9%E5%A0%B41-14-7
■本籍地 神戸市長田区苅藻通4丁目15■生年月日 昭和36年8月3日生
■前住所 奈良県吉野郡川上村寺尾533−1(奈良県警吉野署熊代刑事も驚愕)


693 名前:デフォルトの名無しさん :2007/02/07(水) 09:04:13
Window の Style を良く見れ。

694 名前:デフォルトの名無しさん :2007/02/07(水) 10:08:16
>>690
Dialogならstaticかeditを乗っけて、SetWindowTextで設定するのがいいかも

695 名前:デフォルトの名無しさん :2007/02/07(水) 11:22:10
>>693
Styleの項目を一つ一つ試してみました。
勉強不足で恥ずかしい限りです。
ご助言をありがとうございました。

696 名前:デフォルトの名無しさん :2007/02/07(水) 12:16:14
APIについての質問ではないのですが・・・

VC2003付属のヘルプ(Document Explorerかな)で、SDKを閲覧する際、
文章中のリンクをクリックすると、10秒程待たされるのですが、これは正常ですか?
読む気が失せてしまうので、スラスラ読みたいのですが・・・

697 名前:デフォルトの名無しさん :2007/02/07(水) 12:34:54
webに検索にいかないようにした?

698 名前:デフォルトの名無しさん :2007/02/07(水) 14:33:14
初歩的な質問ですみません。
リソースエディタで作ったダイアログに貼り付けてあるstaticの文字を
変更したいと思っています。

DLG_VIEW DIALOG DISCARDABLE 0, 0, 180, 300
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_THICKFRAME | WS_VISIBLE
CAPTION ""
FONT 8, "MS 明朝"
{
CONTROL "Label101", DLG_LABEL, "STATIC", WS_CHILD | WS_VISIBLE | SS_NOTIFY, 0, 0, 150, 300
}

このDLG_LABELのハンドルを取るにはどうしたら良いのでしょうか?
初歩的なサイトばかりですが、色々とサンプルから探していたのですが
頭が飽和状態になって段々とわからなくなってきました。
DLG_LABELにSetWindowTextで文字を送る方法を教えてください。
お願いします。

699 名前:デフォルトの名無しさん :2007/02/07(水) 14:38:08
DLG_LABEL が -1 (or 65535) になっていないことを resource.h で確認したうえで、
(-1 or 65535 ならば、衝突しないユニークな値に書き換える)

SetDlgItemText( <ダイアログの hwnd>, DLG_LABEL, <変更文字> );

700 名前:デフォルトの名無しさん :2007/02/07(水) 15:21:40
>>699 のSetDlgItemTextは、GetDlgItem + SetWindowText の機能だから、
一応、GetDlgItem() も参考にな

701 名前:デフォルトの名無しさん :2007/02/07(水) 15:40:24
>>699-700
ありがとうございます。
無事にできました。

自分で調べたときにはGetDlgItem()+ SetWindowText までは行っていたのですが、
なぜか失敗をしていました。
ヘッダファイルが読み込まれておらず、DLG_LABELがdefineされていなかったようです。
ご助言で気づけて助かりました。

702 名前:デフォルトの名無しさん :2007/02/07(水) 23:35:18
ロケットマウスで、文字列の貼り付けという機能があるのですが、この機能はEXSELやTEXT EDITORに
あらかじめ設定しておいた文字列を貼り付けることが出ます。
WindowsAPIにはクリップボード関連のAPIがあるのですが、クリップボードからデータを取得など、微妙にピントがずれたAPIしか見つけられませんでした。
良い方法がありましたら教えてください。よろしくお願いします。

703 名前:デフォルトの名無しさん :2007/02/07(水) 23:39:32
何をしたいの?

704 名前:デフォルトの名無しさん :2007/02/07(水) 23:46:50
たとえば、事前にクリップボードに文字列を入れておき、ソフトウェアで一秒後にクリップボードに貼り付けを行うソフトを作りたいです。
クリップボードの貼り付け先は、不特定多数のアプリケーションです。

705 名前:デフォルトの名無しさん :2007/02/07(水) 23:47:23
??

706 名前:デフォルトの名無しさん :2007/02/07(水) 23:53:14
クリップボード「から」貼り付けじゃなくて?

日本語がわからん

707 名前:デフォルトの名無しさん :2007/02/07(水) 23:57:59
クリップボードの内容をリアルタイムで更新したいのか?
Synthesized Clipboard Formatsで何とかしろ。

708 名前:デフォルトの名無しさん :2007/02/08(木) 00:00:12
ごめんなさい。変な日本語でした。

たとえば、事前にクリップボードに文字列を入れておき、ソフトウェアで一秒後にクリップボードの内容を
不特定多数のアプリケーションに貼り付けを行うソフトを作りたいです。

貼り付け先は、ユーザーが事前にカーソルを合わせ、待機します。

709 名前:デフォルトの名無しさん :2007/02/08(木) 00:03:43
>>706
クリップボード「から」です。
すみません。

710 名前:デフォルトの名無しさん :2007/02/08(木) 00:11:33
WM_PASTEでも送ってやれば?

711 名前:デフォルトの名無しさん :2007/02/08(木) 00:14:01
それかも!!
アドバイスありがとうございます。

712 名前:デフォルトの名無しさん :2007/02/08(木) 00:17:31
>>710
まさにそれでした。
ありがとうございました。

713 名前:デフォルトの名無しさん :2007/02/08(木) 05:56:24
わざわざクリップボードを使う意味がわからんけどまぁ関係ないからどうでもいいや

714 名前:デフォルトの名無しさん :2007/02/08(木) 09:41:35
フォルダ選択ダイアログで、パスを取得することはできたのですが
そのパスを使ってファイルの保存先を変更するときに、「¥」が一つしかついていないので
パスとして認識されません
どうしたらいいのでしょうか?

BrowseInfo構造体
SHGetPathFromIDList
など使用しました

715 名前:デフォルトの名無しさん :2007/02/08(木) 09:49:49
>「¥」が一つしかついていないので
うーん、何が言いたいのか分かるような分からないような・・・

C/C++の文字列リテラルのエスケープ文字を勘違いしてない?

716 名前:デフォルトの名無しさん :2007/02/08(木) 10:04:46
例えば、フォルダ選択ダイアログで「D:\program\log」というパスが
取得できたとします
これをそのまま保存先のパスにすると、\がエスケープ文字として認識されてしまいます
なので、「D:\\program\\log」のようなパス名になるようにしたのですが・・・
説明が下手ですいません

717 名前:デフォルトの名無しさん :2007/02/08(木) 10:12:35
ホームラン級の馬鹿ですか?

718 名前:デフォルトの名無しさん :2007/02/08(木) 10:21:19
× パス名になるようにしたのですが・・・
○ パス名になるようにしたいのですが・・・

719 名前:デフォルトの名無しさん :2007/02/08(木) 10:22:24
>>716
エスケープ文字がどういう代物なのか、よく考え直してください・・・

720 名前:デフォルトの名無しさん :2007/02/08(木) 10:23:36
> エスケープ文字として認識されてしまいます 

これは気のせい

721 名前:デフォルトの名無しさん :2007/02/08(木) 10:37:12
>>716
とりあえず失敗してるのは別の理由
エスケープ文字だと思い込んでるから、本当の理由を調べられない

722 名前:デフォルトの名無しさん :2007/02/08(木) 11:27:38
みなさんありがとうございます
文字列中に「\」があると、それがエスケープ文字と解釈されてしまうので
文字「\」を文字列定数の中に指定したいときは「\」を2つ並べて
「\\」のように書く必要がある、という解釈は間違っているのですか?

L""で囲んでみましたがダメでした


723 名前:デフォルトの名無しさん :2007/02/08(木) 11:30:31
>>722
そういうソースで "" で囲まれた文字列は \ をエスケープするが
フォルダ選択ダイアログで取得した文字列は関係ない。

724 名前:デフォルトの名無しさん :2007/02/08(木) 11:42:38
フォルダパスをINIファイルに保存していたのですが
それを取得し、Log.txtを末尾にくっつけるところで""を用いていたのが原因でした
strcatでそのまま結合したらできました
ありがとうございました

725 名前:デフォルトの名無しさん :2007/02/08(木) 15:20:46
pugya-

726 名前:デフォルトの名無しさん :2007/02/08(木) 18:21:49
メニューをoffice風する方法を教えてください

727 名前:デフォルトの名無しさん :2007/02/08(木) 18:22:36
http://www.teebo.com/img/OfficeMenuStill_2007.png
こんな感じ

728 名前:デフォルトの名無しさん :2007/02/08(木) 18:27:30
どーせcodeguruとかcodeprojectにあるんじゃねーの

729 名前:デフォルトの名無しさん :2007/02/08(木) 18:44:37
オーナードローで激しくやってんじゃない?
専用のライブラリか下手したら別言語でさっくり作ったりしてるのかも試練が

730 名前:デフォルトの名無しさん :2007/02/08(木) 18:45:37
WPFとか

731 名前:デフォルトの名無しさん :2007/02/08(木) 20:25:33
MSはオーナドロー大好きっ子
Win95時代のOfficeでグラデ付きタイトルバー使ってたり

732 名前:デフォルトの名無しさん :2007/02/08(木) 20:42:42
.NET Framework 2.0使えば普通にできるよ
Win32APIだけでやりたいならオナードローしてください

733 名前:デフォルトの名無しさん :2007/02/08(木) 20:49:58
.NET Framework
Cに慣れた俺にはアー
最初からNET覚えとけばよかったorz

734 名前:デフォルトの名無しさん :2007/02/08(木) 20:56:15
新たにインスコするのが嫌なのでWin32api

735 名前:デフォルトの名無しさん :2007/02/08(木) 21:04:12
ダイアログなどウィンドウで親に乗っているコントロールだけアルファ255で
親を透過したいのですが、どのように行えば委員でしょうか。
UpdateLayeredWindowに32ビットDIBを持たせてピクセルごとにアルファを
管理できるところまで調べたのですが、コントロールが表示されない?ので
それ以上の描画が出来ません。
WM_PRINTを投げてみたりもしましたが非対応な模様。
レイヤードウィンドウの子ウィンドウをレンダリングする方法など無いのでしょうか?


736 名前:デフォルトの名無しさん :2007/02/08(木) 21:11:42
コントロールをDIBに出力しない限り無理。

737 名前:735 :2007/02/08(木) 21:16:02
>>736
>コントロールをDIBに出力しない限り無理。
ごもっとも。出力したいです。
自前で書けってことですか?

738 名前:デフォルトの名無しさん :2007/02/08(木) 21:27:10
自前でやる場合にはテーマAPIを使うのが常道。

BeginPaint、EndPaint、GetDC、ReleaseDCをAPIフックしてオフスクリーンに
書かせてもいいかも知れない。この場合でも、文字列が描画される際に文字ある
のところは背景も塗られるが、空白のところは何の描画もなしとか、その辺の
不具合があるのである程度は自前でやる必要も出てくると思う。

739 名前:デフォルトの名無しさん :2007/02/08(木) 21:28:58
>>726
.NET Framework 2.0のSystem.Windows.Forms.MenuStrip
このスレでこの答えはないか。

740 名前:デフォルトの名無しさん :2007/02/08(木) 21:55:47
mscoree呼んでCLRホスティングしろということですね!

741 名前:デフォルトの名無しさん :2007/02/08(木) 23:36:46
C#やってみたら、アプリが劇的に簡単に作れてしまって。
今までやってたC++やWin32apiって、何だったんだろうかと。
もうたぶんこの世界に戻ることは無いだろうな。

742 名前:デフォルトの名無しさん :2007/02/08(木) 23:41:24
C#でも細かいことをしようとすればWin32APIを使います

743 名前:デフォルトの名無しさん :2007/02/08(木) 23:41:27
ガリガリSDKのメリットだってあるさ

744 名前:デフォルトの名無しさん :2007/02/08(木) 23:46:00
>>741
むしろC#は不安じゃない?

745 名前:デフォルトの名無しさん :2007/02/08(木) 23:50:15
ちょっと質問。

テキストエディトの入力を消去したいときってSendMessageで何のメッセージを
送ればいいんでしょうか?

746 名前:745 :2007/02/08(木) 23:51:30
馬鹿か俺は・・・・
SetWindowTextの存在をすっかり忘れてたorz

747 名前:デフォルトの名無しさん :2007/02/08(木) 23:53:01
713さんの言うように、もっと良い方法ありましたら、教えてください。
よろしくお願いします。

748 名前:デフォルトの名無しさん :2007/02/08(木) 23:55:25
自分のバカさに1分15秒で気づいた>>745のお話でした。



749 名前:デフォルトの名無しさん :2007/02/09(金) 00:21:41
される側にとっては迷惑か、ノイズだけど
ひとに問題点を説明するその途中で
「あ、わかった、やっぱもういい。ありがとう」ってのはよくある

750 名前:デフォルトの名無しさん :2007/02/09(金) 00:22:16
質問させて下さい。

//..
chocolate choco = Valentine(ore);

と、バレンタイン関数を呼び出してみたのですが・・・
何度やっても戻り値に NULL が返ってきます!

どうしてなんですか? 教えて下さい><


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.