Free Information Technology Magazines and eBooks

Saturday, June 20, 2009

C#: How to minimize windows form to system tray

If we want our application to minimize to system tray, we can use of the WindowState Property of the form. WindowState gets or sets a value that indicates whether a window is restored, minimized, or maximized. Then to inform user that the application was minimized to system tray we can consume the NotifyIcon control to handle it. On this article, I will try to show you a sample project to implement the topic.


To minimize windows form to system tray, follow these steps.
1. Create your new C# project.
2. From the toolbox, drag the NotifyIcon to your form.
3. On your Form_Load event, copy and paste the following code:


private void Form1_Load(object sender, EventArgs e)
{
notifyIcon1.BalloonTipText = "This application was minimized to tray";
notifyIcon1.BalloonTipTitle = "My Sample Application";

//Display the Notify Baloon for 1 second
notifyIcon1.ShowBalloonTip(1000);

//Set the WindowState in Minimized Mode
WindowState = FormWindowState.Minimized;
}


4. Then on Form_Resize event, add this code.



private void Form1_Resize(object sender, EventArgs e)
{
//On minimize mode, show the form in System Tray only
if (FormWindowState.Minimized == WindowState)
{
Hide();
}
}


5. Now to restore the form upon double-click on NotifyIcon control.



private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
//Display the Form in normal state
WindowState = FormWindowState.Normal;
Show();
}


The sample project I used on this article was tested in Visual Studio 2008.

For more coding tips & tricks, subscribe now.

Twicsy is a Twitter Pic Search Engine

Twicsy is a Twitter Pic Search EngineAnother way to enjoy real-time tweets is a killer picture search engine launched by Searchles and which I stumbled from TechCrunch posted by MG Siegler. Twicsy main page is filled with image thumbnails that are images shared over Twitter. The default display are images from the past hour which you can customize to a different time intervals. If you mouse hover on any thumbnails will show you a larger version of the image, along with some details about the picture.

Twicsy is useful if you want to find interesting pictures posted by people in real-time. Its better than image searching of Google in terms of updating index merely due to shorter interval (which is almost if not in real-time).

Here's a sample screen shot from the search term "Paris":
Twicsy Pic Search Engine Result

To stay up-to-date on Technology news, subscribe now.

Firefox 3.5 Release Candidate 2

Firefox 3.5 Release Candidate 2A more stable build following the release of Firefox 3.5 RC1 a day ago is now available for download on the Mozilla ftp site under its release directory. The new release candidate has already been distributed to Mozilla's mirror servers and is available for download from third-party sites like Major Geeks. The web browser can also be downloaded directly from the Mozilla website or from within Firefox using the automatic update option.

Firefox 3.5 (Release Candidate) is the seventh development milestone of Firefox 3.5, the next version of the Firefox web browser. Here are what's new on this new browser build:

- This release candidate is now available in more than 70 languages - get your local version.
- Improved tools for controlling your private data, including a Private Browsing Mode.
- Better performance and stability with the new TraceMonkey JavaScript engine.
- The ability to provide Location Aware Browsing using web standards for geolocation.
- Support for native JSON, and web worker threads.
- Improvements to the Gecko layout engine, including speculative parsing for faster content rendering.
- Support for new web technologies such as: HTML5

Friday, June 19, 2009

How to change the status bar color of SSMS 2008 Query Editor

Change the status bar color of SSMS 2008SQL administrators that works on several SQL Servers at the same time may have to open several SSMS windows to quickly switch from one server to another. But sometimes having too many windows on your screen can be confusing. Luckily for us, there are ways to make sure you are running the a query on the right server. One method is to check which SQL server you are currently logged-in and another is to color code your SQL Server Management Studio query editor.

To change the status bar of a SQL Server 2008's SSMS query editor, follow these steps:

1. On SSMS Connect to Server dialog, click Options button.

SSMS 2008 Connect to Server

2. Then select the Connection Properties tab.
3. Tick the "Use Custom Color" checkbox and click the Select button beside it to choose the custom color as shown below.

How to change the status bar color of SSMS 2008 Query Editor


4. Now create a new query. The status bar color should already changed.

SQL Server 2008 SSMS Query Editor Status Bar color

For more SQL Server Tips, subscribe now.

CrowdEye: The twitter search engine

CrowdEye: The twitter search engineToday, the former Microsoft search head Ken Moss is launching the newest twitter search engine (beta version): CrowdEye. In a nutshell, crowdeye is a powerful, custom-built social search engine that helps users to find specific topic on tweets, retweets and twitter links. It offers not only the latest tweets on a topic, but also a list of the most popular links on a topic and a tag cloud of associated terms.


The following are CrowdEye interesting features:

- Social search results from Twitter that displays tweets, popular links, and top tags for every search.
- Historical views to examine how the conversation around a topic has evolved over time.
- Powerful query language that allows fine-tuning queries to find the exact topic you’re interested in.

CrowdEye Search Results

CrowdEye is a new, privately funded started located in the Seattle area that was co-founded by Ken and Becca Moss. Ken has a rich history in the search industry after founding, building and running the Bing search technical team for Microsoft for 5 years.

To stay up-to-date on Technology news, subscribe now.

Thursday, June 18, 2009

Cannot install driver for USB devices in Windows XP

This morning during the user acceptance testing of our Automation Gate Project, our vendor encountered a problem while installing the thermal printer (Zebra TTP 2130) to a Kiosk unit that has Windows XP Embedded Standard OS installed. The problem was that Windows cannot detect the appropriate driver for the printer even if we already manually specified the software driver (we are very sure that it is the correct driver). Noticeably upon plugin, other USB devices also keeps on prompting for a software driver.



So after few minutes of research and analysis, I found out that the Windows OS USB support default drivers were not installed. In short by default, Windows cannot auto install any kind of USB devices. To install the USB device support and temporarily fix the current issue (permanent solution is to reinstall the whole system), we followed this step-by-step procedure.

1. Upon device plugin the Add hardware wizard will appear. Choose "Install the hardware that I manually select from a list (Advanced)"

Install the hardware that I manually select from a list (Advanced)

2. From the common hardware types list, choose Printers or the type of the USB device you want to install

add new hardware common hardware types list

3. Then on the next screen, click the Have disk button to bring up the "Install from disk". Browse to "C:\windows\inf" and locate "usbprint.inf" for printers or just click OK for other devices. This will install the USB support drivers.

Instal USB Device Support driver from c:\windows\inf

4. If you installing a printer or a specific device, windows will ask for another driver and this time point it to the actual software driver included on your device installer cd.



For more windows tips subscribe now.

MSN Live Messenger Antivirus Script

MSN Live Messenger Antivirus ScriptEvery time I open my Windows Live Messenger (formerly MSN Live Messenger), I am bombarded with instant messages that asking me to go to random links. It is tiring to close each window so sometimes I prefer to close the live messenger when I'm no to chat. Being one of the most popular instant messengers for the Windows operating system makes it a target for all kinds of malicious software and spam. Thank you to WLM Safe these threats can now be stopped.


WLM Safe is the first Messenger Plus! Live's script that add security functions to your Windows Live Messenger giving you protection against the most important malwares which spread through it. Here are the complete features of WLM Safe:

WLM Safe MSN Live Messenger Antivirus Script

- Anti-Virus: detects and blocks infected links sent by virus in conversation windows.
- Anti-Phishing: detects and blocks phishing links sent by virus in conversation windows.
- Anti-Spam: blocks annoying spam messages sent by your contacts.
- Anti-Flood: detects flood attacks and block the authors.
- Anti-Freeze: block messages that make old messenger's versions crash.
- Anti-Copy: notifies you if one of your Messenger's contacts copy your Nickname.
- Anti-Bot: notifies you if you're chatting with a Bot.
- Anti-Hackers: notifies you if you're chatting with an Unsafe contact.

To stay up-to-date on Cool softwares, subscribe now.

Wednesday, June 17, 2009

VB.NET ListView Tutorial. Add, Edit and Delete

One of my most commonly used VB.NET control to present a spread-sheet like information is the ListView control. According to msdn, a list-view control is a window that displays a collection of items using one of four different views. List-view controls provide several ways to arrange and display items and are much more flexible than simple List Boxes. On this article, I will discuss the basics of adding, editing and deleting items in listview. A complete sample project can be downloaded at the end of this post.


At the end of the tutorial, you will be able to do the following tasks:
1. Properly configure ListView to display spread-sheet information
2. Add Items on ListView
3. Edit Item on ListView
4. Delete Item on ListView

Here are the step-by-step to create our list view tutorial project.
1. Create a new project in VB.NET
2. Put the following controls as shown below on your initial form

VB.NET ListView Tutorial. Add, Edit and Delete

3. Set the ListView control and set the following properties from the Property window.
a. FullRowSelect = True
b. GridLines = True
c. HideSelection = False
d. MultiSelect = False
e. View = Details

4. Declare blnAdd variable that will indicate if Add button was pressed.

Dim blnAdd As Boolean 'indicator if add button was pressed


5. On your add button, put the following codes:

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

If btnAdd.Text.ToLower() = "add" Then 'if caption is ADD then perform Add process
txtFirstName.Enabled = True
txtLastName.Enabled = True
btnAdd.Text = "Save"
btnEdit.Text = "Cancel"
btnDelete.Enabled = False
txtFirstName.Text = ""
txtLastName.Text = ""
blnAdd = True

Else 'save process
txtFirstName.Enabled = False
txtLastName.Enabled = False
btnAdd.Text = "Add"
btnEdit.Text = "Edit"
btnDelete.Enabled = True
If blnAdd Then
AddItemToListView()
Else
EditItemInListView()
End If

End If
End Sub


Also include these codes below the btnAdd_Click, these functions are for adding and editing listview items.


'''
''' Add listview items
'''

'''
Private Sub AddItemToListView()
'Usually the first unique colum is the root item
Dim lv As ListViewItem = ListView1.Items.Add(txtFirstName.Text)
'The remaining columns are subitems
lv.SubItems.Add(txtLastName.Text)
End Sub
'''
''' Edit Item in ListView
'''

'''
Private Sub EditItemInListView()
If ListView1.SelectedItems.Count > 0 Then 'make sure there is a selected item to modify
ListView1.SelectedItems(0).Text = txtFirstName.Text
ListView1.SelectedItems(0).SubItems(1).Text = txtLastName.Text
End If
End Sub


6. On the edit button, place the following codes.

Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
If txtFirstName.Text.Length > 0 Then
If btnEdit.Text.ToLower() = "edit" Then 'if caption is EDIT then perform EDIT process
txtFirstName.Enabled = True
txtLastName.Enabled = True
btnAdd.Text = "Save"
btnEdit.Text = "Cancel"
btnDelete.Enabled = False
blnAdd = False
Else 'cancel process
txtFirstName.Enabled = False
txtLastName.Enabled = False
btnAdd.Text = "Add"
btnEdit.Text = "Edit"
btnDelete.Enabled = True
End If
Else
MessageBox.Show("Please select record to edit")
End If

End Sub


7. While on the delete button, copy-and-paste these codes:

Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
If ListView1.SelectedItems.Count > 0 AndAlso MessageBox.Show("Do you want to delete this item?", "Confirm", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then 'make sure there is a selected item to delete
ListView1.SelectedItems(0).Remove()
End If
End Sub


8. To select an item and put the values on the respective textboxes, use the following codes:

Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
If ListView1.SelectedItems.Count > 0 Then
txtFirstName.Text = ListView1.SelectedItems(0).Text
txtLastName.Text = ListView1.SelectedItems(0).SubItems(1).Text
End If
End Sub


To see and examine the complete project, you can download it here.

To stay up-to-date on Technology news, subscribe now.

Opera Unite: a Web server on a browser

Opera Unite: a Web server on a browserOpera is now sending a clearer message to desktop endeavors: they are dead serious to win the browser war. Unlike on mobile browsers, Opera hasn't penetrated the desktop market despite the fact that Opera has been arguably the fastest browser with most features. Today, they announced a new feature which will be shipping with the release of Opera 10 that might give them an edge on the ongoing browser battle. The new feature is called Opera Unite.

In a nutshell, Opera Unite is a web server within a web browser that extends what you are able to do online. Aside from just browsing the internet, User can now have the luxury to share files and photos, communicate with other users, chat, and host their own web site directly on on their computer. Simply enable Opera Unite when you start Opera, and you are ready to go. This service was similar to FileOverMiles that was previously featured here.

For developers, Opera Unite gives access to powerful APIs to develop amazing Opera Unite services. You can now read detailed documentation about it at opera dev.

If you want to try this exciting feature before it go public, download the lab version of Opera 10 with Opera Unite

To stay up-to-date on Technology news, subscribe now.

Tuesday, June 16, 2009

How to Commit and Rollback Transaction in .NET

If you are sending several commands to SQL Server database, you should make it a habit to build your application to be rollback capable in order to recover all commands that were already executed. In ADO.NET, we can achieve this recovery process by using the SqlTransaction object. A SqlTransaction's ROLLBACK method can undo any work performed since the BeginTransaction method was executed while the COMMIT method ends a transaction and makes all changes visible to other users.


To give you an example of commit and rollback transaction, take a look at the following code.
1. The program will insert a record to tblLogs table (Logs).
2. Then insert a new category to tblCategories table (Category).
3. If insertion to category failed, rollback the 1st command (which is insert to tblLogs) else apply the changes by committing the transaction.

How to Commit and Rollback SQL Transaction in C#

using (SqlConnection con = new SqlConnection("Data Source=mnlho8ap33;Initial Catalog=BillingSys;Persist Security Info=True;User ID=sa;Password=12345678"))
{
using (SqlCommand cmd = con.CreateCommand())
{
SqlTransaction trans = null;

try
{
con.Open();
// BeginTransaction() Requires Open Connection
trans = con.BeginTransaction();

// Assign Transaction to Command
cmd.Transaction = trans;

//1st command to execute. This will be rollback if 2nd command fails
cmd.CommandText = "INSERT INTO tblLogs (LogDescription) VALUES ('Inserted New Category')";
cmd.ExecuteNonQuery();

//2nd command to execute
cmd.CommandText = "INSERT INTO tblCategories (CategoryName) VALUES ('TEST CATEGORY')";
cmd.ExecuteNonQuery();



trans.Commit();
}
catch
{
trans.Rollback();
Console.WriteLine("Error while processing command. Previous execution was rollback");
}
finally
{
con.Close();
}
}

}


How to Commit and Rollback SQL Transaction in VB.NET

Dim con As New SqlConnection("Data Source=mnlho8ap33;Initial Catalog=BillingSys;Persist Security Info=True;User ID=sa;Password=12345678")
Dim cmd As SqlCommand = con.CreateCommand()
Dim trans As SqlTransaction = Nothing
Try
con.Open()
'BeginTransaction() Requires Open Connection
trans = con.BeginTransaction()

'Assign Transaction to Command
cmd.Transaction = trans

'1st command to execute. This will be rollback if 2nd command fails
cmd.CommandText = "INSERT INTO tblLogs (LogDescription) VALUES ('Inserted New Category')"
cmd.ExecuteNonQuery()

'2nd command to execute
cmd.CommandText = "INSERT INTO tblCategories (CategoryName) VALUES ('TEST CATEGORY')"
cmd.ExecuteNonQuery()

trans.Commit()
Catch
trans.Rollback()
Console.WriteLine("Error while processing command. Previous execution was rollback")
Finally
con.Close()
End Try


Don't forget to include System.Data.SqlClient namespace.

For more coding tips & tricks, subscribe now.

Quickly hide or kill windows programs using Window Hider

Quickly hide or kill windows programs using Window HiderIf your a person that sometimes need to do something else aside from work during office hours (to relax and rejuvenate) then you need this freeware that quickly hide specific windows on your desktop from prying eyes (e.g. your boss). The Window Hider makes you personal break safer and quicker.


Window Hider allows user to add multiple windows program and its corresponding shortcut keys. When the program detected a defined shortcut key, it automatically hides those windows in your while list. On its latest version, it can hide all the programs in your white list if you move your mouse in the upper left hand corner of your desktop. It can also filter the windows by title text.

Quickly Hide or kill windows programs

To add windows programs to the white list, just drag the icon in the add new process window over the active window and it automatically pickups the information of that window for you. Then set up your shortcut keys from the settings option and you're done.


For more free and cool softwares, subscribe now.

Monday, June 15, 2009

How to search for Files by extension name using LINQ

Previously on the blog post entitled How to read multiple files in a directory using LINQ, I discussed how easy to query files from a specified directory. On this topic, I will try to do the same task and much more. I will also show you how to implement IEnumerable Interface to handle the search results and reuse existing LINQ query to filter the result by extension name. Sample projects for both C# and VB.NET are available for download at the end of this article.


Here are the tasks we want to achieve on this .NET project.

1. The program should ask the user for a specific directory.
2. It will query the specified directory then display the number of files found.
3. The program should ask the user for filename extension to browse.
4. It will display the list of filenames equal to the extension the user entered.
5. The program should display the latest/newest file from the list.


To start building our project, follow these steps.

1. Create a New Console VB or C# Project.
2. Add the following required namespaces.

In VB

Imports System.Collections.Generic
Imports System.IO
Imports System.Linq


In C#

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


3. Then add the following sourcecode on your Main sub. (Take note of the additional GetAllFiles function. It should be added below the Main sub)

In VB

Module Module1

Sub Main()

Try
Console.WriteLine("Enter the directory you want to read.")
Dim lDir As String = ""
lDir = Console.ReadLine()

Dim fileList = GetAllFiles(lDir)

Console.WriteLine("{0} file(s) found on {1}", fileList.Count, lDir)

Console.WriteLine("Enter the file extension you want to browse. Format is .txt, .xml")
Dim lExt As String = "*.*"
lExt = Console.ReadLine()

' run a query for by extension using LINQ
' list all files order by filename
Dim Query1 = From file In fileList _
Where file.Extension.ToLower() = lExt.ToLower() _
Order By file.Name _
Select file

For Each file In Query1
Console.WriteLine(file.FullName)
Next


' Now sort the existing Query1 by creation time
Dim Query2 = From file In Query1 _
Order By file.CreationTime _
Select file.Name, file.CreationTime

' Get the latest/newest file
Dim latestFile = Query2.Last

Console.WriteLine("\r\nThe latest file is {0} in the {1}. Creation time: {2}", _
latestFile.Name, lDir, latestFile.CreationTime)

' Keep the console window open in debug mode
Console.WriteLine("Press any key to exit.")
Console.ReadKey()
Catch ex As Exception
Console.WriteLine(ex.Message)
Console.ReadKey()
End Try


End Sub

' retrieve all files on the specified directory
Function GetAllFiles(ByVal root As String) As IEnumerable(Of FileInfo)
Return From file In My.Computer.FileSystem.GetFiles _
(root, FileIO.SearchOption.SearchAllSubDirectories, "*.*") _
Select New FileInfo(file)
End Function

End Module


In C#

static void Main()
{
try
{
Console.WriteLine("Enter the directory you want to read.");
string lDir = "";
lDir = Console.ReadLine();
string rootDir = @lDir;

IEnumerable<System.IO.FileInfo> fileList = GetAllFiles(rootDir);
Console.WriteLine("{0} file(s) found on {1}", fileList.Count(), lDir);

Console.WriteLine("Enter the file extension you want to browse. Format is .txt, .xml");
string lExt = "*.*";
lExt = Console.ReadLine();

//run a query for by extension using LINQ
//list all files order by filename
IEnumerable<System.IO.FileInfo> fileQuery =
from file in fileList
where file.Extension.ToLower() == lExt.ToLower()
orderby file.Name
select file;

foreach (FileInfo fi in fileQuery)
{
Console.WriteLine(fi.FullName);
}

// Get the latest/newest file
var latestFile =
(from file in fileQuery
orderby file.CreationTime
select new { file.FullName, file.CreationTime })
.Last();

Console.WriteLine("\r\nThe latest file is {0}. Creation time: {1}",
latestFile.FullName, latestFile.CreationTime);

// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}

// retrieve all files on the specified directory
static IEnumerable<System.IO.FileInfo> GetAllFiles(string path)
{
if (!System.IO.Directory.Exists(path))
throw new System.IO.DirectoryNotFoundException();

string[] fileNames = null;
List<System.IO.FileInfo> files = new List<System.IO.FileInfo>();

fileNames = System.IO.Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories);
foreach (string name in fileNames)
{
files.Add(new System.IO.FileInfo(name));
}
return files;
}


You can also download the complete Visual Studio 2008 project on the following links:
VB.NET Sample Project
C# Sample Project

For more coding tips & tricks, subscribe now.

Tweet from Gmail. Add Twitter on Gmail

Tweet from Gmail. Add Twitter on GmailNow you can send your tweet right from your Gmail account by using twitter Gadget called "TwitterGadget for Gmail". This gadget make it possible to access Twitter directly from within Google Mail. The installation of Twitter Gadget is simple and takes less than a minute to complete. All you have to do is enable the "Add any gadget by URL" option in Gmail settings.


To enable "Add any gadget by URL", click the Lab icon at the top of Gmail homepage then scroll down to bottom.

enable Add any gadget by URL in GMail

Now to add twitter, go to your GMail settings then choose Gadgets tab. On the "Add a gadget by URL" textbox, type the following URL "http://www.twittergadget.com/gadget_gmail.xml" as shown below.

Add tweeter on Gmail

Click Add button to complete the process. Your twitter should appear on your side bar.

Twitter on Gmail

For more cool softwares, subscribe now.

Sunday, June 14, 2009

Get All Stored Procedures of Database in SQL Server

While browsing on msdn blogs from my Google reader, I found an interesting SQL script that I was previously looking for. The SQL script uses cursor to print all stored procedure in a database. You have to change your result pane to text view to see the result properly.


Here is the SQL script to print all stored procedure using cursor.


USE AdventureWorks
GO
DECLARE @procName VARCHAR(100)
DECLARE @getprocName CURSOR
SET @getprocName = CURSOR FOR
SELECT s.name
FROM sysobjects s
WHERE type = 'P'
OPEN @getprocName
FETCH NEXT
FROM @getprocName INTO @procName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_HelpText @procName
FETCH NEXT
FROM @getprocName INTO @procName
END
CLOSE @getprocName
DEALLOCATE @getprocName
GO


You can also get the same result using sysobject.


SELECT [text]
FROM
sysobjects o
JOIN syscomments c ON o.id = c.id
WHERE xtype = 'P'


For more SQL coding tips and tricks, subscribe now.

How to add watermark on photos using Picasa 3

How to add watermark on photos using Picasa 3Before uploading your pictures and sharing it to the web, it is best practice to put watermark on your pictures to symbolize your ownership to these photos. If you are using Picasa Web Albums as image hosting then you may been using Picasa software to upload, organize and edit your pictures. One useful features of Picasa 3 (latest version) is the capability to add watermarks to your photos. You can do this in two ways: automatically during export and manually.

To add watermarks automatically during export, follow these steps.
1. From the menu, click File > Export to Picture Folder
2. Browse the folder where you want the pictures to be exported.
3. You can also change some options like image size and image quality.
4. Tick the "Add a watermark" check box.
5. Now on the text box below, put the watermark text you want to appear on these pictures.

How add watermark on photos using Picasa 3 during export

Using this method, Picasa 3 by default put the watermark at the lower-right corner of the photo. Another limitation is that you cannot change the font face and size of the watermark.

The second method is done manually but it is more personalize. Here are the steps:
1. Open one picture you want to put a watermark.
2. From the Basic Fixes tab on the left side pane, click the Text object.
3. Then click where you want to display the text. You can also drag it to any location inside the picture.
4. Change the font, size and format of the text the way you want it.
5. Now click the apply button to save changes.

How add watermark on photos using Picasa 3, Custom

6. Now to apply the same watermark on the other pictures. Open the picture that has watermark already.
7. From the menu, click Edit > Copy Text
8. Go back to Library then select all the pictures you want to watermark.
9. Then from the menu, click Edit > Paste Text. The selected pictures now should all have watermarks.

For more cool softwares, subscribe now.